• 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;
  • 相关阅读:
    写代码时减少bug的八种方式
    ObjectiveC中对Url的参数进行编码
    iPhone中预览文档的三种方式
    GUID和INT两种数据类型做主键的比较
    通过FxCop来验证.NET编码规范
    一位程序员的一个LBS应用的想法
    iPhone中XML处理以及网络上的图片显示
    iOS开发之iPhone通过get和post方式请求asp.net webservice
    iOS开发之将XML转换成树
    objectivec内存管理基础
  • 原文地址:https://www.cnblogs.com/lidabo/p/3597559.html
Copyright © 2020-2023  润新知