관리 메뉴

JIE0025

[ C++ ] this 포인터 본문

기타 학습/Language

[ C++ ] this 포인터

Kangjieun11 2022. 5. 17. 18:58
728x90

멤버 함수 내에서 사용 가능한 this 라는 이름의 포인터를 사용할 수 있다. 

객체 자신을 가리키는 용도이다.

 

예제

#include <iostream>

using namespace std;

class SimpleClass {

private:
	int num;
public:
	SimpleClass(int n) : num(n)
	{
		cout << "num " << num << endl;
		cout << "address= " << this << endl;
	}

	void ShowData() {
		cout << num << endl;
	}

	SimpleClass* GetThisPointer() {
		return this;
	}

};
int main() {

	SimpleClass s1(100);
	SimpleClass* ptr1 = s1.GetThisPointer();
	cout << ptr1 << endl;

	ptr1->ShowData();

	return 0;
}

 

- SimpleClass 라는 클래스를 하나 만들었고

- private한 멤버로 num을 만들었다. 

- public한 멤버에 생성자에서 이니셜라이저를 이용해 멤버변수 num을 초기화하고, num을 출력, 주소값을 출력했다.

- this를 반환하는 함수는 GetThisPointer인데, 반환형이 포인터이기 때문에 SimpleClass* 로 되어있다. 

 

<메인 함수>

- SimpleClass의 객체 s1을 하나 만들었고 100을 인자값으로 전달했다. 

- SimpleClass 의 주소를 담은 변수 ptr1을 만들었고, s1.GetThisPointer를 통하여 s1의 this를 반환받는다. 

- ptr1을 출력해보면 s1의 this값이 나온다.

- ptr -> ShowData() >>> 포인터는 화살표를 이용해 데이터에 접근할 수 있다. 

 

(추가)

클래스나 구조체에서 변수를 사용할 때 

. 이랑 -> 로 접근하는데

 

.     : 참조로 요소를 선택함 (점 앞에 저장하려는 데이터가 있을 때)

->   : 포인터로 요소를 선택함 (화살표 앞에 포인터가 있을 경우에 )

 

 

 

 

this 는 포인터이므로 

class 멤버 함수에서 this -> num = 200; 이런식으로 접근 가능하다!

 

#include <iostream>

using namespace std;

class SimpleClass {
private:
	int num;
	int num2;
public:
	SimpleClass(int n, int m) {
		this->num = n;
		this->num2 = m;
	}

};
int main() {

	SimpleClass s2(100,200);
	s2.ShowData();
	return 0;
}