Software Development/C, C++

1_this3_멤버 변수의 포인터

huiyu 2014. 7. 20. 13:15

멤버 변수의 포인터

class Dialog { public: int color; void Close() {} }; int main() { // 멤버 변수의 포인터 만들기. int Dialog::*p = &Dialog::color; printf("%d\n", p); // 0 Dialog dlg; dlg.*p = 10; // dlg.color = 10 으로 컴파일. }

멤버 변수의 포인터의 경우 멤버 함수의 포인터와 마찬가지로 Dialog::(객체명::)을 붙여주면 된다. 

접근하는 방법 역시 역참조를 이용, dlg.*p와 같이 접근하면 된다.(객체를 생성해야 접근 가능)


이 때 멤버변수 포인터 p를 출력하면 0임을 확인할 수 있다.

Dialog 클래스에 int a를 추가하고 p를 다시 한번 출력해 보자.

class Dialog 
{
public:
	int a;
	int color;
	void Close() {}
};

p를 출력하면 4가 나옴을 확인할 수 있다. 

다시 int b를 추가하고 출력하면  8이 나옴을 확인할 수 있다.


정리하면 멤버변수의 포인터 p는 멤버가 놓인 offset임을 알 수 있습니다. 

 *(&dlg.*p) = 10는 컴파일 될 때 *(&dlg + p) = 10의태로 컴파일 됩니다.


728x90

'Software Development > C, C++' 카테고리의 다른 글

2_new2_예제  (0) 2014.07.21
2_new1_new,operator new, operator delete  (0) 2014.07.20
1_this4_다중 상속의 멤버함수 포인터  (0) 2014.07.20
1_this2_함수포인터의 this  (0) 2014.07.20
1_ this1  (0) 2014.07.20