成員函數指針,顧名思義,就是函數指針,不過這個函數不是全局函數,而是一個類的成員函數。
#include <iostream>
using namespace std;
class A {
public:
void seta(int i) {
a = i;
}
void print() {
cout << a;
}
int a;
};
typedef void (A::*Method)(int);
void call(A *self, Method m) {
(self->*m)(5);
self->print();
}
int main(int argc, char *argv[]) {
A a;
call(&a, &A::seta);
return 0;
}
比如上面這段代碼中,A::seta就是成員函數。
(動態)成員函數和全局函數本質上並無不同,都是函數代碼所在的內存地址。不同的是在調用時必須傳遞this指針,比如你可以這樣調用a.seta(0)
,也可以這樣調用((A *)0)->seta(0)
。
重定義成員函數類型的語法為:
typedef 返回值類型 (類名::*新的類型)(成員函數參數列表)
調用成員函數指定任意this的語法為:
(賊死->*成員函數指針)(參數)
感謝 http://www.cnblogs.com/qq78292959/archive/2012/10/10/2719155.html