this는 객체 자신에 대한 포인터로서 클래스의 멤버 함수 내에서만 사용된다.
this는 객체의 멤버 함수가 호출될 때, 컴파일러에 의해 보이지 않게 전달되는 객체에 대한 주소이다.
class Circle{
int radius;
public:
Circle(){ this->radius=1;}
Circle(int radius){ this->radius=radius; }
void setRadius(int radius){this->radius=radius;}
};
this와 객체
각 객체 속의 this는 다른 객체 속의 this와 서로 다른 포인터이다.
this가 필요한 경우
Circle(){
this->radius=1; // this->를 생략하고 radius=1;로 해도 무관함
}
첫째로 멤버 변수의 이름과 동일한 이름으로 매개 변수 이름을 짓고자 하는 경우이다.
Circle(int radius){
this->radius=radius;
}
만약 위의 코드에서 this를 생략하여 작성하면, radius는 모두 매개 변수를 지칭하게 되어, 멤버 변수에 값을 쓰는 목적이 왜곡된다.
둘째로 객체의 멤버 함수에서 객체 자신의 주소를 리턴할 때가 있다. 이때 this는 반드시 필요하다.
class Sample{
public:
Sample*f() {
...
return this; // 현재 객체의 주소 리턴
}
};
연산자 중복을 구현할 때, 이런 경우가 많이 발생하며, this 없이는 연산자를 중복할 수 없는 경우도 있다.
this의 제약 조건
-this는 클래스의 멤버 함수에서만 사용할 수 있다. 멤버가 아닌 함수에서는 어떤 객체에도 속하지 않았기에 this를 사용할 수 없다.
-멤버 함수라도 정적 멤버 함수는 this를 사용할 수 없다. 정적 멤버 함수는 객체가 생성되기 전에 호출될 수 있으며, 정적 멤버 함수가 실행되는 시점에서 '현재 객체'는 존재하지 않을 수 있기 때문이다.
'Programming Language > C++' 카테고리의 다른 글
| 문자열 다루기 (0) | 2023.04.07 |
|---|---|
| string 클래스 개요 (0) | 2023.04.07 |
| 객체 배열의 동적 생성 및 반환 (0) | 2023.04.06 |
| C++ 동적 메모리 할당 및 반환 (0) | 2023.04.06 |
| 객체 배열 (0) | 2023.04.06 |