#include <iostream>
#include <cassert>
using namespace std;

/*
class IntList
{
private:
	int m_list[10];
	
public:
	void setItem(int index, int value)
	{
		m_list[index] = vlaue;
		
	}
	
	int getItem(int index)
	{
		return m_list[index]
	}
    
    int* getList()
    {
        return m_list;
    }
    
};
*/

class IntList
{
private : 
    int m_list[10];
public:
    int & operator [] (const int index) // []를 많이 쓰려고 하는 것이기 때문에 if문을 쓰면 느려질 것이라서 assert를 씀
    {
        assert(index >=0); 
        assert(index < 10);
        return m_list[index];
    }
    const int & operator [] (const int index) const
    {
        assert(index >=0);
        assert(index < 10);
        return m_list[index];
    }
};

int main()
{
	IntList my_list;
    //my_list.setItem(3,1);
    //cout << my_list.getItem(3) << "\n";
    //my_list.getList()[3] = 10;
    //cout << my_list.getList()[3] << "\n"; // getList()가 있으면 헷갈린다.
    
    my_list[3] = 10;
    cout << my_list[10] << "\n"; // 만약 const 값에 접근을 하고 싶다, 변경은 안되더라도 출력은 하고 싶다 하면 const를 붙여줘서 구분 가능
    
    return 0;
}