C++中怎么获取类的成员函数的函数指针?
用一个实际代码来说明。
- class A
- {
- public:
- staticvoid staticmember(){cout<<"static"<<endl;} //static member
- void nonstatic(){cout<<"nonstatic"<<endl;} //nonstatic member
- virtualvoid virtualmember(){cout<<"virtual"<<endl;};//virtual member
- };
- int main()
- {
- A a;
- //static成员函数,取得的是该函数在内存中的实际地址,而且因为static成员是全局的,所以不能用A::限定符
- void(*ptrstatic)()=&A::staticmember;
- //nonstatic成员函数 取得的是该函数在内存中的实际地址
- void(A::*ptrnonstatic)()=&A::nonstatic;
- //虚函数取得的是虚函数表中的偏移值,这样可以保证能过指针调用时同样的多态效果
- void(A::*ptrvirtual)()=&A::virtualmember;
- //函数指针的使用方式
- ptrstatic();
- (a.*ptrnonstatic)();
- (a.*ptrvirtual)();
- }
可以参考《C++ Primer(3rd)》第532页13.6指向类成员的指针一节~
1.一个指向外部函数的指针声明为:
- void(*pf)(char*,constchar*);
- void strcpy(char* dest,constchar* source);
- pf=strcpy;
2.一个指向类A成员函数的指针声明为:
- void(A::*pmf)(char*,constchar*);
声明的解释是:pmf是一个指向A成员函数的指针,返回无类型值,函数带有二个参数,参数的类型分别是char * 和 const char *。除了在星号前增加A:: ,与声明外部函数指针的方法一样。
3.给成员指针赋值的方法是将函数名通过指针符号&赋予指针名。
如下所示:
- class A
- {
- public:
- void strcpy(char*,constchar*);
- void strcat(char*,constchar*);
- };
- pmf =&A::strcpy;
C++中怎么获取类的成员函数的函数指针?的更多相关文章
- Python中如何获取类属性的列表
这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...
- java反射获取类的成员函数,成员变量,构造函数
package com.imooc.reflect;import javax.sound.midi.Soundbank;import java.lang.reflect.Constructor;imp ...
- 回调函数中使用MFC类的成员或对话框控件的简单方法
在MFC的很多程序中,常常需要在回调函数中调用MFC类的类成员变量.类成员函数,亦或者对话框控件的句柄.由于回调函数是基于C编程的Windows SDK的技术,而类成员又有this指针客观条件限制.. ...
- C#派生类中使用基类protected成员的方法
我们知道C#中通过继承可以使一个具有公共数据和方法的基类被广泛应用从而减少代码量,这样派生类会具有基类中所有成员(除构造器等),我们理所当然可以通过派生类实例来使用基类的成员.那么当基类成员被prot ...
- [javaSE] 反射-获取类的成员属性和构造方法
成员属性和构造方法皆为对象,通过Class对象的方法可以得到 package com.tsh.reflect; import java.lang.reflect.Constructor; import ...
- .NET 获取类内成员的名称,以字符串形式显示
需要做一个功能,显示类内的属性名和对应的值.比如有类 Public Class SupervisedParams Public TestMode As string Public Ti ...
- C++中怎样获取类成员的指针
我们都知道C++ class中有三种成员函数,static(静态的),nonstatic(非静态的),virtual(虚拟的)各种成员函数的指针各有差别,下面是一个完整的样例:(注意红颜色的差别 ...
- PHP中如何定义类及其成员属性与操作
1.类的定义: i. 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操 ...
- 通过class类获取类的成员变量和构造函数信息
随机推荐
- 使用SoapUI 测试 Web Service
一.官方定义 soapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclip ...
- C#中Excel的导入和导出的几种基本方式
在上一篇(http://www.cnblogs.com/fengchengjushi/p/3369386.html)介绍过,Excel也是数据持久化的一种实现方式.在C#中.我们常常会与Excel文件 ...
- lex&yacc 9
the "line 15: error: syntax error" cant stop, if i test the statement "i<=0" ...
- OCI下报出的数据库重账错
[2014-01-09 19:43:45.469220][22347888] Level 0 COCITOOL: Error - OCI_ERROE - errcode[1],errmsg[ORA-0 ...
- how to Enable Client Integration
i got a problem,the problem is list cant use export to excel button in sharepoint 2010. I found my a ...
- Android 源码编译 步骤
添加资源后编译步骤 1:lunch 112:mmm frameworks/base/core/res/生成Install: out/target/product/hammerhead/system/f ...
- Traveller项目技术资料
Spring Spring PecClinic:Spring官方的宠物医院项目 it.zhaozhao.info/archives/63818:SPRING JPA入门 Spring Data RES ...
- nginx 重启命令
#重启nginx sudo /etc/init.d/nginx restart sudo /etc/init.d/nginx Usage: /etc/init.d/nginx {start|stop| ...
- 多线程的单元测试工具 - GroboUtils
写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...
- 在centos 6.4下安装opencv 2.3.1
系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...