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;
  • 相关阅读:
    c语言博客作业04--数组
    C博客作业03--函数
    c博客作业02--循环结构
    C博客作业01--顺序分支结构
    我的第一篇博客
    java--购物车程序的面向对象设计
    c博客作业05--指针
    C博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
  • 原文地址:https://www.cnblogs.com/lidabo/p/3597559.html
Copyright © 2011-2022 走看看