用一個實際代碼來說明。
<a href="http://www.dewen.org/q/4538/C%2B%2B%E4%B8%AD%E6%80%8E%E4%B9%88%E8%8E%B7%E5%8F%96%E7%B1%BB%E7%9A%84%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E7%9A%84%E5%87%BD%E6%95%B0%E6%8C%87%E9%92%88%EF%BC%9F"></a>
class A
{
public:
staticvoid staticmember(){cout<<"static"<<endl;} //static member
void nonstatic(){cout<<"nonstatic"<<endl;} //nonstatic member
virtualvoid virtualmember(){cout<<"virtual"<<endl;};//virtual member
};
int main()
A a;
//static成員函數,取得的是該函數在記憶體中的實際位址,而且因為static成員是全局的,是以不能用A::限定符
void(*ptrstatic)()=&A::staticmember;
//nonstatic成員函數 取得的是該函數在記憶體中的實際位址
void(A::*ptrnonstatic)()=&A::nonstatic;
//虛函數取得的是虛函數表中的偏移值,這樣可以保證能過指針調用時同樣的多态效果
void(A::*ptrvirtual)()=&A::virtualmember;
//函數指針的使用方式
ptrstatic();
(a.*ptrnonstatic)();
(a.*ptrvirtual)();
}
可以參考《C++ Primer(3rd)》第532頁13.6指向類成員的指針一節~
1.一個指向外部函數的指針聲明為:
void(*pf)(char*,constchar*);
void strcpy(char* dest,constchar* source);
pf=strcpy;
2.一個指向類A成員函數的指針聲明為:
void(A::*pmf)(char*,constchar*);
聲明的解釋是:pmf是一個指向A成員函數的指針,傳回無類型值,函數帶有二個參數,參數的類型分别是char * 和 const char *。除了在星号前增加A:: ,與聲明外部函數指針的方法一樣。
3.給成員指針指派的方法是将函數名通過指針符号&賦予指針名。
如下所示:
public:
void strcpy(char*,constchar*);
void strcat(char*,constchar*);
pmf =&A::strcpy;