Qaupot Blog
Software Engineering, Trip

306. 첨자 연산자 오버로딩

🕐 Thu, 27 Feb 2014 09:00:00 GMT 🕓 Sun, 05 Sep 2021 12:21:00 GMT

첨자 연산자 ( [] , 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 검색을 하기도 하고, 클래스를 받아 사용할 수도 있습니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.