연산자 오버로딩을 통해 배열처럼 접근이 가능하다.
class BoundCheckArray
{
private:
int * arr;
int arrlen;
public:
BoundCheckArray(int len) : arrlen(len)
{
arr = new int[len];
}
int& operator[] (int idx)
{
if(idx < 0 || idx >= arrlen)
cout << "can't";
return arr[idx];
}
}
배열의 이름은 그 자체로 배열주소를 나타냄
저장된 데이터는 유일성을 보장해줘야함
위와 같은 이유로 배열 클래스의 복사관련 연산은 제한할 필요가 있다.
class BoundCheckArray
{
private:
int * arr;
int arrlen;
BoundCheckArray(const BoundCheckArray& arr) { }
BoundCheckArray& operator= (const BoundCheckArray& ref) { }
public:
...
}
따라서 복사생성자, 대입연산자는 private로 선언해준다.
const의 유무로 함수를 오버로딩할 수 있다.
따라서 const 참조자로 객체를 지정할 때 접근할 수 있는 const 오버로딩을 만들어놓는 것이 좋다.
반환형이 int& 가 아닌 int 형인 이유는 int&를 통해 참조를 반환하면 값을 바꿀 수 없다는 const선언에 위반할 수 있기 때문이다.
객체를 저장하는 배열 클래스를 정의할 때 객체를 통째로 저장하는 방법보단 객체의 주소값을 저장하는 방법을 사용하자.