[STL] 배열 인덱스 연산자 오버로딩

클래스에 배열 인덱스를 적용시키게 하는 연산자

 

소스코드
#include <iostream>
using namespace std;

class Array {
	int* arr;
	int size;
	int capacity;

public:
	//기본 생성자 cap매개변수 100을 받고 capacity를 100으로 초기화하여 arr크기를 100칸 할당하여 arr에 넣는다.
	Array(int cap = 100) : arr(0), size(0), capacity(cap) {
		arr = new int[capacity]; //arr[100]
	}

	~Array() {
		delete[] arr; //동적 할당 해제
	}

	void Add(int data) {
		if (size < capacity)
			arr[size++] = data;
	}

	int Size() const {
		return size;
	}

	int operator[] (int index) const {
		return arr[index];
	}

	int& operator[](int index) {
		return arr[index];
	}
};

void main() {
	Array ar(10); //ar배열 10칸 생성
	ar.Add(10);
	ar.Add(20);
	ar.Add(30);

	cout << ar[0] << endl;
	cout << endl;

	const Array& ar2 = ar;
	cout << ar2[0] << endl;
	cout << endl;

	ar[0] = 100;

	//const변수는 const함수를 불러와서 지역변수를 불변시키는 const에 대입X
	//ar2[0] = 100; //에러! 상수 객체를 반환하므로 대입할 수 없음.

}
코드내용
1. Main함수에서 Array클래스 ar을 매개변수 10을 전달하여 10크기의 Array클래스 ar배열을 생성한다.
2. ar에 10, 20, 30을 순차적으로 삽입한다. 10개초과 삽입시 Add함수에 if문에 적합하지 않아서 삽입되지 않는다.
3.  ar[0]으로 int& operator[] (int index) 함수 호출
4. const Array& 형 ar2 에 기존 ar삽입
5. ar2는 const 이므로 int operator[] (int index) const 함수 호출
6. ar[0]은 const가 아니기때문에 삽입이 가능
7. ar2는 const이기 때문에 상수 객체를 반환하므로 대입이 불가능.

 

결과