본문 바로가기

C++

[C++] this는 포인터다

class Simple
{
private:
     int value;
     
public:
     Simple(int avalue) : value(avalue) { }
     void OutValue() {
          printf("value=%d\n",value);
     }
}; 

void main()
{
     Simple A(1), B(2);
     A.OutValue();
     B.OutValue();
}

 

main에서 OutputValue()는 매개변수가 없는데 어떻게 A인지 B인지 알고 value값을 출력할까?

그것은 사실 위 설명처럼 함수 앞의 객체의 포인터를 매개변수로 받고 있기 때문이다.

OutputValue는 매개변수가 빈 것 처럼 보이지만 Simple * const 타입의 this를 매개변수로 받는 것이다.

 

Simple *FindBig(Simple *Other) {
     if (Other->value > value) {
          return Other;
     } else {
          return this;
     }
}

 

위 함수는 다른 객체와 비교해서 더 큰 것을 반환하는 함수이다.

Simple타입의 포인터를 반환하는데 this를 반환한다.

this는 자기자신이면서 Simple 타입의 포인터다.

아래 코드는 위 코드와 같다.

 

Simple &FindBig(Simple &Other) {
     if (Other.value > value) {
          return Other;
     } else {
          return *this;
     }
}

위 함수는 Simple타입의 레퍼런스를 반환하는데 *this를 반환한다.

포인터의 값에 접근하는 *포인터 와 레퍼런스는 같은 의미이므로 this가 포인터인 것이 성립한다.

 

 

참조 - Call by Referece와 Pointer

https://cppking.tistory.com/14