이번에는 배열요소에 접근할때 사용하는 [] 연산자를 오버로딩 하고자 한다.

배열보다 나은 배열 클래스

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 함수를 이용한 오버로딩의 활용

const BoundCheckIntArray& ref

위와 같이 선언을 할 경우

ref.operator[] (idx) 는 const 함수가 아니기 떄문에 커파일 에러를 밷는다.

operator[] 함수를 const 로 만들시 저장 자체가 불가능해지기 때문에 다른부분에서 컴파일 에러가 발생한다.

“const 의 선언유무도 함수 오버로딩의 조건에 해당합니다.”

오버로딩 해주면 해결이 된다.