티스토리 뷰

 

1. this 포인터

클래스 내에서, 해당 객체를 가리키는 포인터를 말한다. 따라서 this 포인터의 내부는 해당 객체의 '주소'로 이루어져 있다.

class Simple {
private:
	int num;
public :
	Simple(int n) : num(n) {
		cout << "num= " << num << endl;
		cout << "address= " << this << endl; //해당 객체의 주소 반환
	}

	Simple* GetThisPointer() {
		return this; //this pointer 반환
	}

	void ShowSimple() {
		cout << "num= " << num << endl;
	}
};

int main(void) {

	Simple sim(100); //객체 생성
	Simple* ptr = sim.GetThisPointer(); //this 포인터를 포인터변수 ptr에 저장
	cout << ptr << endl; //객체 sim의 주소 반환
	ptr->ShowSimple(); //포인터형식으로 해당 객체에 접근 가능 
	return 0;

}

따라서, 클래스 외부에서 객체 포인터 변수에 특정 객체의 this 포인터를 반환하여 저장하면,  그 포인터 변수 (여기서는 ptr)에는 그 객체의 '주소'가 저장되고, ptr 포인터 변수를 통해서 멤버함수 접근이 가능해진다.

 

2. Self-Reference

Self-Reference는 말그대로, 외부에서 객체에 대한 '참조자'를 생성하는 것이다. 이 참조자는 결국 해당 객체를 '참조'하기 때문에, 객체와 '동일하게' 멤버함수에 대한 접근이 가능해진다.

this 포인터를 객체 포인터변수에 저장하면 그 객체의 '주소'를 가리키는 '포인터 변수'가 된 것과 달리,

this 포인터를 참조자에 반환하여 저장하면, 참조자는 그 객체를 '참조'하게 되는 것이다.

class SelfRef {
private :
	int num;

public:
	SelfRef(int n) : num(n) 
	{
		cout << "객체생성: "<<num<< endl;
	}; //객체 생성
	
	SelfRef& Adder(int n) {
		num += n;
		return *this; //this 포인터를 이용해 참조 값 반환
	}
	
	SelfRef& ShowTwoNumber() {
		cout << num << endl;
		return *this; //this 포인터를 이용해 참조값 반환
	}
};

int main(void) {
	SelfRef obj(3); //객체 생성
	SelfRef& Ref = obj.Adder(2); //객체 참조자 &Ref에 obj 객체 참조정보 저장됨
    
	Ref.ShowTwoNumber(); //참조자로서 객체와 동일하게 멤버함수 접근 가능
	obj.ShowTwoNumber();

	Ref.Adder(2).ShowTwoNumber().Adder(3).ShowTwoNumber(); 
	//참조정보 반환의 극단적인 예시 
    //멤버함수 Adder와 ShowTwoNumber모두 참조정보를 반환하기 때문에
    //계속해서 반환받는 참조정보로 해당 객체 멤버함수에 접근 가능  
	Ref.ShowTwoNumber();
	obj.ShowTwoNumber(); 
	return 0;

}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함