안 쓰던 블로그

C++ this포인터에 관하여 본문

언어/C, C++

C++ this포인터에 관하여

proqk 2019. 12. 2. 22:29
반응형

this란?

-객체 자신의 포인터

-각 객체 속의 this는 다른 객체의 this와 다름

-컴파일러가 묵시적으로 삽입 선언함

-클래스 멤버 함수 내에서만 사용 가능

-static 멤버 함수에서 this 사용 불가

 

 

예제를 보면서 하나씩 봅시다

평범한 this 사용 예제

class Book{
	int num;
public:
	Book() { this->num=1; }
    Book(int num) { this->num=num; }
    void setBooknum(int num) {this->num = num; }
};

1. 객체 자신의 포인터

class Go{
public:
	Go* f(){
    	return this; //this는 주소값
    }
};

f() 함수는 주소값을 반환해야 함

this는 자기 자신의 주소값이니까 this로 반환 가능

 

2. 각 객체 속의 this는 다른 객체의 this와 다름

위의 코드로 b1.setBooknum(2); b2.setBooknum(3);을 실행 시키면

두 객체 안의 this는 각 객체의 num을 가리키고 있다

 

3. 컴파일러가 묵시적으로 삽입 선언함

class Go{
	int num;
public:
	void setNum(int a){
    	this->num = a;
    }
};

이런 클래스가 있으면

 

class Go{
	int num;
public:
	void setNum(Go* this, int a){
    	this->num = a;
    }
};

실제로 처리될 때는 컴파일러가 묵시적으로 이렇게 삽입

 

다른 예시:

Go ob;
ob.setNum(1);

이렇게 멤버 함수를 호출한다면

 

ob.setNum(&ob, 1);

ob의 주소가 this 매개 변수에 전달됨

 

 

4. 클래스 멤버 함수 내에서만 사용 가능

멤버 함수 밖에서는 this가 어디의 this인지 모르니까 당연히 사용 못함

객체와의 관련성이 없음

 

5. static 멤버 함수에서 this 사용 불가

객체가 생기기 전에 static 함수 호출이 먼저 시작

반응형
Comments