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
'C++' 카테고리의 다른 글
| [C++] cin,cout,endl 계산속도 올리기(시간 초과 해결) (0) | 2021.12.28 |
|---|---|
| [C++] 범위 기반 for문(range based for statement) (0) | 2021.12.25 |
| [C++] 포인터와 레퍼런스의 차이 (0) | 2021.12.21 |
| [C++] 생성자에서 포함된 객체 초기화 (0) | 2021.12.20 |
| [C++] 메모리 누수 체크 (0) | 2021.12.20 |