이번에는 배열요소에 접근할때 사용하는 [] 연산자를 오버로딩 하고자 한다.
C, C++ 의 기본 배열은 다음의 단점을 지니고 있다.
“경계검사를 하지 않는다.”
때문에 다음과 같은 엉뚱한 코드가 만들어 질 수도 있다. 컴파일도 되고, 실행도 무리 없이 진행되기 때문이다.
int main(void)
{
int arr[3]={1, 2, 3};
cout<<arr[-1]<< endl; //???
}
arrObject[2];
위에 문장은 다음과 같이 해석된다
int operator[](int idx) {...}
따라서
arrObject[2];
는 다음과 같이 해석된다.
arrObject.operator[] (2);
나머지는 알수 있듯이 array class 를 정의하고 arrlen 을 멤버변수로 놓음으로써 Array index out of bound 체크를 할 수 있다.
const BoundCheckIntArray& ref
위와 같이 선언을 할 경우
ref.operator[] (idx) 는 const 함수가 아니기 떄문에 커파일 에러를 밷는다.
operator[] 함수를 const 로 만들시 저장 자체가 불가능해지기 때문에 다른부분에서 컴파일 에러가 발생한다.
“const 의 선언유무도 함수 오버로딩의 조건에 해당합니다.”
오버로딩 해주면 해결이 된다.