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;
时间: 2024-10-02 15:26:44

C++中怎么获取类的成员函数的函数指针?的相关文章

python中如何对类的成员函数开启线程?

问题描述 python中如何对类的成员函数开启线程? 单独对某个函数开启线程是可以的,比如下面的代码: import threading import thread import time def doWaiting(): print 'start waiting:', time.strftime('%H:%M:%S') time.sleep(3) print 'stop waiting', time.strftime('%H:%M:%S') thread1 = threading.Thread

c++-MFC怎么在普通的函数中操作窗口类的成员变量

问题描述 MFC怎么在普通的函数中操作窗口类的成员变量 例如我想在函数f中操作CtestDlg类的变量e.该怎么做? 解决方案 定义一个全局变量 CtestDlg dlg 创建对话框给它赋值 e定义成public的 用dlg.e 得到变量. 解决方案二: 类的普通成员函数的指针类普通成员函数与函数的区别类成员函数与普通函数的区别 解决方案三: 给函数传入形参,用引用&实现

PHP中如何定义类及其成员属性与操作

 类的概念:类是具有相同属性和操作的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和操作说明两个主要部分. 1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操    作........ } 3.定义一个不能被继承的类,使用final

详解WordPress开发中用于获取分类及子页面的函数用法_php技巧

get_categoryget_category 可能我们平时接触的不多,但却是很有用,网上这个函数介绍的貌似不多,所以今天只针对官方 WordPress 英文文档做一下翻译. 函数描述 获得指定分类,以数组或是对象的形式返回. 函数使用 get_category( $cat, $out, $filter ) 参数描述 $cat:分类ID,或 $out返回值类型[OBJECT, ARRAY_A, or ARRAY_N] $filter 函数返回值 这里主要讲一下对象类型的返回值, 都有注释,请自

php中实现获取随机数组列表的自定义函数_php技巧

贴一段代码,在php中获取随机数组 不用多说,直接贴代码,php中的array_rand很变态,突破了正常人的理解,繁琐 function create_random_ids( $min,$max,$limited ) { $_base_ids = range($min,$max); $_temp_key = array_rand ($_base_ids,min(count($_base_ids),$limited+10)); //拼接 $ids = array(); for ($x=0; $x

objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)

今天在园子里看到了一篇牛文"Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针",讲得十分精彩,忍不住把它的代码加上注释整理于此,以便日后查看. 个人体会:obj-C中的"Class类型变量"比c#中的Object基类还要灵活,可以用它生成任何类型的实例(但是它又不是NSObject).而选择器SEL与函数指针IMP,如果非要跟c#扯上关系的话,这二个结合起来,就点类似c#中的反射

C++ 如何获取类成员函数地址?

C语言中可以用函数地址直接调用函数:     void print ()       {          printf ("function print");       }       typdef void (*fun)();       fun f = print;       f(); C++中类非静态成员函数必须通过实例去调用,C++中类成员函数调用:     class test       {       public:       void print ()     

详解C++编程中的嵌套类的声明与其中的函数使用_C 语言

可以在一个类的范围内声明另一个类.这样的类称为"嵌套类". 嵌套类被视为在封闭类的范围内且可在该范围内使用.若要从嵌套类的即时封闭范围之外的某个范围引用该类,则必须使用完全限定名. 下面的示例演示如何声明嵌套类: // nested_class_declarations.cpp class BufferedIO { public: enum IOError { None, Access, General }; // Declare nested class BufferedInput.

C#中对类的成员的访问

在编写程序时,我们可以对类的成员使用不同的访问修饰符,从而定义它们的访问级别. 公有成员 C#中的公有成员提供了类的外部界面,允许类的使用者从外部进行访问.公有成员的修饰符为public,这是限制最少的一种访问方式. 私有成员 C#中的私有成员仅限于类中的成员可以访问,从类的外部访问私有成员是不合法的.如果在声明中没有出现成员的访问修饰符,按照默认方式成员为私有的.私有成员的修饰符为private. 保护成员 为了方便派生类的访问,又希望成员对于外界是隐藏的,这时可以使用protected修饰符