#include <iostream>
using namespace std;
class C {
public:
int m;
void f(int i) { m += i; };
};
int C::*pm = &C::m;
typedef void (C::*ptr2memberFunc) (int);
ptr2memberFunc pf = &C::f;
int main(int argc, const char * argv[]) {
C obj;
obj.*pm = 100;
(obj.*pf) (200);
cout << obj.m << endl;
C *pt = new C;
pt->*pm = 300;
(pt->*pf) (400);
cout << pt->m << endl;
return 0;
}
실행결과
300
700
7 ~ 8
- 7행은 클래스 C의 데이터 멤버이고 8행은 멤버 함수, 이들 멤버를 지정하는 간단한 방법은 멤버 선택 연산자의 도트 연산자(.)를 사용하는 것
11 ~ 13
- 11행은 클래스 C의 데이터 멤버 m을 포인터 변수 pm이 가리키는 것이고, 12, 13행은 클래스 C의 멤버 함수 f를 포인터 변수 pf가 가리키는 것, pf는 멤버 함수에 대한 포인터를 나타냄, 12행은 리턴 타입이 void이고 int 인자를 받는 클래스 C의 멤버 함수에 대해 포인터를 ptr2memberFunc라는 이름으로 선언한 것