C++中怎么獲取類的成員函數的函數指針?


用一個實際代碼來說明。

  1. class A
  2. {
  3. public:
  4.     staticvoid staticmember(){cout<<"static"<<endl;}   //static member
  5.     void nonstatic(){cout<<"nonstatic"<<endl;}          //nonstatic member
  6.     virtualvoid virtualmember(){cout<<"virtual"<<endl;};//virtual member
  7. };
  8. int main()
  9. {
  10.     A a;
  11.     //static成員函數,取得的是該函數在內存中的實際地址,而且因為static成員是全局的,所以不能用A::限定符
  12.     void(*ptrstatic)()=&A::staticmember;      
  13.     //nonstatic成員函數 取得的是該函數在內存中的實際地址    
  14.     void(A::*ptrnonstatic)()=&A::nonstatic;
  15.     //虛函數取得的是虛函數表中的偏移值,這樣可以保證能過指針調用時同樣的多態效果
  16.     void(A::*ptrvirtual)()=&A::virtualmember;
  17.     //函數指針的使用方式
  18.     ptrstatic();
  19.     (a.*ptrnonstatic)();
  20.     (a.*ptrvirtual)();
  21. }

可以參考《C++ Primer(3rd)》第532頁13.6指向類成員的指針一節~

 

 

1.一個指向外部函數的指針聲明為:

  1. void(*pf)(char*,constchar*);
  2. void strcpy(char* dest,constchar* source);
  3. pf=strcpy;

2.一個指向類A成員函數的指針聲明為

  1. void(A::*pmf)(char*,constchar*);

聲明的解釋是:pmf是一個指向A成員函數的指針,返回無類型值,函數帶有二個參數,參數的類型分別是char * 和 const char *。除了在星號前增加A:: ,與聲明外部函數指針的方法一樣。

3.給成員指針賦值的方法是將函數名通過指針符號&賦予指針名
如下所示:

    1. class A
    2. {
    3.   public:
    4.    void strcpy(char*,constchar*);
    5.    void strcat(char*,constchar*);
    6. };
    7. pmf =&A::strcpy;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM