멤버 변수의 포인터
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 |