C++/C++ 기본

this 포인터

검정비니 2018. 7. 17. 15:59
728x90
반응형

this 포인터




1. this의 기본 개념



this는 객체 자신에 대한 포인터로서 클래스의 멤버 함수 내에서만 사용된다. this는 전역 변수도 아니고 함수 내에 선언된 지역 변수도 아니다. 정확히 말하자면, this는 객체의 멤버 함수가 호출될 때, 컴파일러에 의해 보이지 않게 전달되는 객체에 대한 주소이다. this 포인터를 이용하여 Circle 클래스를 작성하면 다음과 같은 형태가 된다.


i.e.

class Circle {

int radius;

public:

Circle() { this->radius = 1; }

Circle(int radius) { this->radius = radius; }

void setRadius(int radius) { this.radius = radius; }

...

};




2. this와 객체



this는 객체 자신에 대한 포인터이다. 각 객체마다 고유한 this 포인터를 가지고 있으며, 그 this 포인터는 각 객체의 주소를 가리키는 포인터이다.

각 객체 속의 this는 다른 객체 속의 this와 서로 다른 포인터임을 알기 바란다.




3. this가 필요한 경우



다음 생성자 함수의 경우 'this->'를 생략해도 된다.


i.e.

Circle() {

this->radius = 1; //this->를 생략하고 radius = 1;로 해도 무관하다.

}


그렇다면, this는 꼭 필요한 것일까?

this가 꼭 필요한 2가지 경우를 알아보도록 하자.


1) 멤버 변수의 이름과 동일한 이름으로 매개 변수 이름을 짓고자 하는 경우에는 this를 사용해서 멤버 변수를 표시한다.


i.e.

Circle(int radius) { this->radius = radius; }


2) 객체의 멤버 함수에서 객체 자신의 주소를 리턴 할 때가 있다. 이때 this는 반드시 필요하다.


i.e.

class Sample {

public:

Sample *f() {

...

return this; //현재 객체 자신의 주소를 리턴

}

};




4. this의 제약 조건



this를 사용하는데 있어 중요한 제약 사항을 알아보자.



1) this는 클래스의 멤버 함수에서만 사용할 수 있다. 멤버가 아닌 함수에서는 this를 사용할 수 없다. 왜냐하면 그 함수들은 어떤 객체에도 속하지 않기 때문이다,



2) 멤버 함수라도 정적 멤버 함수(static member function)는 this를 사용할 수 없다. 정적 멤버 함수는 객체가 생성되기 전에 호출될 수 있으며, 정적 멤버 함수가 실행되는 시점에서 '현재 객체'는 존재하지 않을 수 있기 때문이다.


반응형

'C++ > C++ 기본' 카테고리의 다른 글

함수 호출 시 객체 전달  (0) 2018.07.26
cin.getline()과 getline()의 차이점  (0) 2018.07.24
객체와 객체 배열의 동적 생성 및 반환  (0) 2018.07.17
동적 메모리 할당 및 반환  (0) 2018.07.16
다차원 객체 배열  (0) 2018.07.07