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类获取类的成员变量和构造函数信息
随机推荐
- C# 私人笔记
.ADO.NET 连接数据库的模版 string constr = "data source=127.0.0.1\\mysql2008;database=dbtest;integrated ...
- VBA 将 ANSI 转换为 UTF-8文件
在使用的时候,先用WriteOut生成一个临时文件(UTF-8带BOM),然后用Convert2utf8将BOM头的前三个字节删除. --------------------------------- ...
- 交叉编译lsof for android
Android 自带的那个 lsof 实际上是 toolbox 里的,功能十分单一,除了显示出所有进程的所有打开的文件外就什么都不能做,连说明也没有 :-( 于是为了 htop 用着爽一点,还是自己编 ...
- 在swift中使用MJRefresh
cocoapod导入的,并且桥接已经完成,但是就是不提示方法,醉了,
- 读<<CLR via C#>> 详谈泛型
1,什么是泛型? 答:泛型是类型的模板,类型是实例(对象)的模板.C#提供了5种泛型:类,接口,委托,结构和方法. 2,使用泛型有什么好处? 答:继承实现的是"代码重用",而泛型实 ...
- (转)印度建全球最大生物识别数据库,MongoDB安全受质疑
受棱镜门影响,各界对Aadhar的质疑从是否将威胁人民隐私与安全,转而聚焦在 Aadhar 搜集.储存以及处理资料的方法,以及美国新创公司 MongoDB 在计划中扮演的角色. 泱泱大国印度一直以来都 ...
- 在慕课学习Bootstrap
---恢复内容开始--- 可以用class=“h1”等给元素加h1样式 <h>------<small>----</small></h> < ...
- will VS be going to
1.Future - Will vs. Going to 2."Will be doing" vs. "will do" 3.Simple Future
- 比较X与Y的大小,绝对精准!!!!!!
代码! #include<stdio.h> int max(int a,int b) { int x; x=a+b; return x; } int main() { int i,n,t; ...
- 《Web编程入门经典》
在我还不知道网页的基础结构的时候,我找过很多本介绍Web基础的书籍,其中这本<Web编程入门经典>,我认为是最好的. 这本书内容很全面.逻辑很严谨.结构很清晰.语言文字浅显易懂. 看这本书 ...