[11-2] 인덱스 연산자 오버로딩

dd_ddong·2022년 8월 14일
0

c++

목록 보기
33/38

배열 클래스

연산자 오버로딩을 통해 배열처럼 접근이 가능하다.

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 참조자로 객체를 지정할 때 접근할 수 있는 const 오버로딩을 만들어놓는 것이 좋다.

반환형이 int& 가 아닌 int 형인 이유는 int&를 통해 참조를 반환하면 값을 바꿀 수 없다는 const선언에 위반할 수 있기 때문이다.

객체저장을 위한 배열 클래스

객체를 저장하는 배열 클래스를 정의할 때 객체를 통째로 저장하는 방법보단 객체의 주소값을 저장하는 방법을 사용하자.

0개의 댓글