[C++] 기본 Syntax 8

1 minute read

멤버함수 내에서 this라는 포인터를 사용할 수 있습니다. this는 객체 자신을 가리키는 용도로 사용합니다.

//SimpleClass.h
#include <iostream>
#ifndef __SIMPLECLASS_H__
#define __SIMPLECLASS_H__
using namespace std;
class SimpleClass {
private:
	int num;
public:
	SimpleClass() {
		num = 0;
		cout << "Address is..." << this << endl;
	}
	int& GetNum() {
		return num;
	}
	SimpleClass* ReturnItSelf() {
		return this;
	}

};
#endif
 //main.cpp
#include <iostream>
#include "SimpleClass.h"

using namespace std;

int main(void) {
	SimpleClass sc1;
	SimpleClass &sc2 = sc1;
	SimpleClass * scPtr = sc1.ReturnItSelf();
	if (sc1.GetNum() == sc2.GetNum() &&
		sc1.GetNum() == scPtr->GetNum()){
		std::cout << "Consistent!" << std::endl;
	}

	cout << "scPtr's address is "<< scPtr << endl;
	return 0;
}

이처럼 this는 그 주소 값과 자료형이 정해지지 않은 포인터입니다. 사용하는 객체에 따라서 주소 값과 자료형이 정해집니다.​

활용

public:
	SimpleClass(int num) {
		this->num = num;
		cout << "Address is..." << this << endl;
	}

다음과 같이 멤버변수와 매개변수의 이름이 같을 때 이들을 구분하기 위해 this를 사용할 수 있습니다. this->를 사용해서는 멤버변수만 가리키고 지역변수르 가리킬 수 없으므로 확실하게 구분이 됩니다.

Self-Reference

//SimpleClass.h
#include <iostream>
#ifndef __SIMPLECLASS_H__
#define __SIMPLECLASS_H__
using namespace std;
class SimpleClass {
private:
	int num;
public:
	SimpleClass() {
		num = 0;
	}
	SimpleClass(int num) {
		this->num = num;
		cout << "Address is..." << this << endl;
	}
	int& GetNum() {
		return num;
	}
	SimpleClass* ReturnItSelf() {
		return this;
	}
	SimpleClass& ReturnSelfReference() {
		return *this;
	}
	SimpleClass& Adder(int n) {
		num += n;
		return *this;
	}
};
#endif
 //main.cpp
#include <iostream>
#include "SimpleClass.h"

using namespace std;

int main(void) {
	SimpleClass sc;
	SimpleClass &sc2 = sc.ReturnSelfReference();
	cout << sc.GetNum() << endl;
	cout << sc2.GetNum() << endl;
	cout << sc.Adder(2).ReturnSelfReference().Adder(3).GetNum() << endl;
	return 0;
}
출력
0
0
5

Tags:

Categories:

Updated: