첨자 연산자 ( [] , Subscript Operator, Index Operator)
첨자 연산자는 배열에서 몇 번째의 데이터를 사용할 것인지 지정합니다.
- 특수한 형태의 2항 연산자 중에서도 자주 사용됩니다.
#include <iostream>
class NumberArray
{
public:
static const int numberArraySize = 5;
private:
int val[numberArraySize + 1];
public:
int& operator [] (int subscript)
{
if (subscript < numberArraySize)
return val[subscript];
return val[numberArraySize];
}
};
int main(int argc, char** argv)
{
NumberArray numArray;
printf("Calculate\n");
for (int i = 0; i < NumberArray::numberArraySize + 3 ; ++i)
{
numArray[i] = i*i;
printf("%d\n", numArray[i]);
}
printf("ArrayCheckn");
for (int i = 0; i < NumberArray::numberArraySize + 3 ; ++i)
{
printf("%d\n", numArray[i]);
}
}
Calculate
0
1
4
9
16
25
36
49
ArrayCheck
0
1
4
9
16
49
49
49
만약 NumberArray 라는 클래스를 배열로 선언할 경우, 배열에 대한 첨자 연산자가 우선됩니다.
NumberArray numArray[20];
numArray[1][0] = 1;
위의 예제에서는 numArray 의 1번 원소에서 NumberArray 의 0번 첨자 연산자를 호출합니다.
주로 내부구조를 숨기면서 Index 를 통한 접근을 허용하고 싶을 때 위와 같은 기능을 만듭니다.
위의 예제코드에서는 단순히 배열을 한번 랩핑했을 뿐이지만,
LinkedList 나 Tree 같은 복잡한 내부 구조를 사용시에는 편리한 접근을 제공할 수 있습니다.
때로는, 'at' 같은 이름을 가진 멤버 함수를 만들어서 이와 같은 기능을 제공하기도 합니다.
또한, 첨자 연산자를 오버로딩 하면 int 값이 아닌 다른 임의의 자료형들도 사용할 수 있습니다.
char 배열을 이용해서 Hash 검색을 하기도 하고, 클래스를 받아 사용할 수도 있습니다.