zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    韩式英语
    Daily dictation 听课笔记
    words with same pronunciation
    you will need to restart eclipse for the changes to take effect. would you like to restart now?
    glottal stop(britain fountain mountain)
    education 的发音
    第一次用Matlab 的lamada语句
    SVN的switch命令
    String的split
    SVN模型仓库中的资源从一个地方移动到另一个地方的办法(很久才解决)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3597559.html
Copyright © 2011-2022 走看看