안녕하세요 삽잡이입니닷...
[] 연산자는 배열을 쓸 때 많이들 보셨죠?
또한 * 의 기능과 같은 역활을 수행한다고 했었죠...
주소 앞/ 뒤에 붙였을 떄 그 주소에 있는 값을 나타내는...
예를들어 [] 연산자는 sap[n];
즉, sap이라는 주소에서 +n번째 메모리를 의미하는 것이죠.
이 연산자는 동일한 자료형들을 보관하는 컬렉션에서 접근하기 위한 용도로 사용됩니다...
이 또한 우리는 중복정의할 수 있습니다.
우선 비교를 통해 살펴보도록 하겠습니다...
int arr[10];
arr[4] = 2;
이와같은 arr 배열의 4번째 index에 2를 입력했을 때에
int형 arr의 주소의 4번째 메모리에 2의 값이 들어갑니다...
하지만, 객체의 입장에서 살펴보도록 하겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class IntArr { int *base; int max; public: IntArr(int num) { max = num; base = new int[max]; } ~IntArr() { delete[] base; } }; IntArr arr(10); arr[2] = 4; | cs |
IntArr라는 클래스
즉, 사용자 정의형으로 int형 사이즈로 연속적인 메모리 공간을 할당했습니다.
IntArr 객체를 생성했고, 버퍼로부터 2번째의 주소에 4를 넣겟다는데...
이러한 피연산자와 일치하는 [] 연산자는 없다고 합니다...
사실 맞는 말입니다..
IntArr은 우리가 정의했으니 컴파일러 입장에서는 이해를 하지 못하게 되니깐요...
자... 이 코드를 해결하기 위해서는 우리는 연산자 중복정의를 해야합니다...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class IntArr { int *base; int max; public: IntArr(int num = 0) { max = num; base = new int[max]; } ~IntArr() { delete[] base; } int& operator[](int index) { if ((index >= 0) && (index < max)) { return base[index]; } throw "펑~!"; } }; void main() { IntArr arr(10); arr[3] = 7; } | cs |
arr[2] 라는 뜻은 메모리 덩어리입니다. 즉, 값과 메모리를 포함한 덩어리라는 것입니다...
그러니 덩어리 통째로 반환을 하여 값을 저장할 수 있도록
반환형을 참조형으로 정의합니다.
이와같이 연산자 중복정의를 통해서
객체에서도 배열과 같이 메모리에 접근하여 값을 저장할 수 있게 됬습니다.
'삽질의 현장 > - C++' 카테고리의 다른 글
#014_시(c)시(c)해서 C++?!_cout과 endl 흉내내기 (0) | 2015.07.13 |
---|---|
#013_시(c)시(c)해서 C++?!_ 대입 연산자 중복 정의 (0) | 2015.07.12 |
#011_시(c)시(c)해서 C++?!_ 이항 연산자 중복정의 (0) | 2015.07.11 |
#010_시(c)시(c)해서 C++?!_ 잡다구리한 것들... (싱글톤, 기능성, 다형성) (0) | 2015.07.10 |
#009_시(c)시(c)해서 C++?!_프로토 타이핑 ... (0) | 2015.07.09 |