,

struct Point {

  int x;

  int y;

  int z;

}

 

int main(void){

 

    Point p;

    p.x = 100;

    p.y = 200;

    p.z = 300;

 

    cout << "p = (" << p.x << ", " << p.y << ", " << p.z << ")\n";

}

 

< 결과 >

p = (100, 200, 300)

 

 

위와 같은 구조체를 p[0], p[1], p[2] 처럼 배열처럼 사용하고 싶다면 아래와 같은 오퍼레이터를 추가하면 된다.

struct Point {

    int x;

    int y;

    int z;

 

    // x의 주소를 기준으로 한 인덱스 위치 참조를 반환한다

    int& operator[] (int index) { return *(&x + index); }

};

 

int main(void){

 

    Point p;

    p.x = 100;

    p.y = 200;

    p.z = 300;

 

    cout << "p = (" << p.x << ", " << p.y << ", " << p.z << ")\n";

 

    p[0] = 10;

    p[1] = 20;

    p[2] = 30;

    cout << "p = (" << p[0] << ", " << p[1] << ", " << p[2] << ")\n";

}

 

< 결과 >

p = (100, 200, 300)

p = (10, 20, 30)

 

 

오퍼레이터를 추가하는 것이 귀찮거나 or 외부 라이브러리라서 할 수 없는 경우에는 아래와 같이 할 수도 있다.

int main(void){

 

    Point p;

 

    int* p2 = &p.x;

    p2[0] = 10;

    p2[1] = 20;

    p2[2] = 30;

 

    cout << "p = (" << p.x << ", " << p.y << ", " << p.z << ")\n";

}

 

< 결과 >

p = (10, 20, 30)

 

 

 

출처: http://qiita.com/_meki/items/eb17ecae1a7ba2fd458a

by 흥배 2015.12.04 08:00