C++中怎么获取类的成员函数的函数指针?
2024-09-10 08:33:03
用一个实际代码来说明。
- 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;
最新文章
- centOs安装jdk1.7
- Unity3D之GUITexture的坐标体系
- jQuery判断checkbox是否选中的3种方法
- Hadoop 调研笔记
- 错记-checkbox radio
- 【Mood-11】值得学习的国内外Android开发者信息
- Keil ";RECURSIVE CALL TO SEGMENT";彻底解决
- IDL 字符串
- 关于web XSS注入问题
- nova boot from volume代码分析
- vi/vim tab键空格数修改
- ES6学习笔记三(proxy和reflect)
- canvas学习-----1px线条模糊问题
- apache 服务器概述--安装(一)
- ASP.NET 网站管理工具介绍
- jenkins构建配置
- python初步学习-Python模块之 re
- 图论之最短路径(2)——Bellman-Ford算法
- .NET 中字符文本中的字符太多 错误处理
- hdu 1087 简单dp