this
- this란 말 그대로 ‘this’ ‘이것’이라는 뜻인데 C++에서 this는 클래스 객체 자신을 가리키는 포인터이다.
- this는 클래스의 멤버 함수 내에서만 사용할 수 있다.(객체 자신을 가리켜야 하기 때문에🧐)
- this가 가리키는 멤버 변수가 객체 간에 공유되지 않는다는 것을 의미한다. 즉, 각 객체의 this는 다른 객체의 this와 다르다.❗️
this가 필요한 경우 두 가지
1. 매개변수의 이름과 멤버 변수의 이름이 같을 경우
- 이러한 경우에는 this를 사용해서 클래스 객체의 멤버 변수를 명확하게 가리킬 수 있다.😃
- ex) 매개변수의 변수명도 radius이고 멤버 변수의 이름도 radius일 때 ‘this→radius’는 클래스 객체의 멤버 변수를 가리킨다.
class Circle {
int radius;
public:
void setRadius(int radius) {
this->radius = radius;
}
};
2. 멤버 함수에서 객체 자신의 주소를 리턴할 때 ‘연산자 중복’과 같은 상황에서 유용하게 사용할 수 있다.
class MyClass {
int data;
public:
MyClass* getThis() {
return this;
}
};
this의 제약 사항 두 가지
1. 멤버 함수가 아닌 곳에서는 사용할 수 없다.
- 직관적으로 생각하면, 객체와 관련이 없는 곳에서는 사용할 수 없다❗️
2. static 멤버 함수에서도 사용 ❌
- static은 클래스 객체 선언 전에 미리 생성되기 때문에, 이런 경우에 this를 사용한다면 객체와의 연관성이 없고 접근 자체가 불가능하기 때문이다.🤣
컴파일러에 의해 처리되는 특별한 포인터
class Sample{
int a;
public:
void setA(int x){
this->a = x;
}
};
int main()
{
Sample ob;
ob.setA(5);
}
- 이와 같이 개발자가 작성한 클래스는 컴파일러에 의해 아래의 코드처럼 바뀌어 처리된다.
class Sample{
int a;
public:
void setA(Sample* this, int x){
this->a = x;
}
};
int main()
{
Sample ob;
ob.setA(&ob, 5);
}
- this는 컴파일러에 의해 묵시적으로 삽입된 매개 변수이다.
- ob의 주소가 this 매개 변수에 전달 된다.