• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++获取类的成员函数的函数指针详解及实例代码

C++获取类的成员函数的函数指针详解及实例代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了类的成员函数,类的静态成员,派生类的构造函数,类的构造函数,string类成员函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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)();
}

</div>

可以参考《C++ Primer(3rd)》第532页13.6指向类成员的指针一节~

 1.一个指向外部函数的指针声明为:

void(*pf)(char*,constchar*);
void strcpy(char* dest,constchar* source);
pf=strcpy;

</div>

2.一个指向类A成员函数的指针声明为:

void(A::*pmf)(char*,constchar*);
</div>

声明的解释是:pmf是一个指向A成员函数的指针,返回无类型值,函数带有二个参数,参数的类型分别是char * 和 const char *。除了在星号前增加A:: ,与声明外部函数指针的方法一样。

3.给成员指针赋值的方法是将函数名通过指针符号&赋予指针名。

如下所示:

class A
{
  public:
   void strcpy(char*,constchar*);
   void strcat(char*,constchar*);
};
pmf =&A::strcpy;

</div>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++获取类的成员函数的函数指针详解及实例代码
  • 怎么实现类的成员函数作为回调函数
  • 类成员函数的重载、覆盖与隐藏之间的区别总结

相关文章

  • 2017-05-28C++ 中try finally关键字详解
  • 2017-05-28哈夫曼算法构造代码
  • 2017-05-28C++二进制翻转实例分析
  • 2017-05-28C语言实现时间戳转日期的算法(推荐)
  • 2017-05-28用C++类实现单向链表的增删查和反转操作方法
  • 2017-05-28探讨编写int strlen(char *strDest);不允许定义变量的问题
  • 2017-05-28浅析C++字节对齐容易被忽略的两个问题
  • 2017-05-28C语言编写简单的定时关机程序
  • 2017-05-28c/c++实现获取域名的IP地址
  • 2017-05-28C/C++中宏定义(#define)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Linux网络编程之UDP Socket程序示例
    • C++结构体数组详细解析
    • C++常用字符串分割方法实例汇总
    • C++如何调用matlab函数
    • 解决C++ 无法从void 转换为LRESULT的方法详解
    • C语言实现类似wget的进度条效果
    • 用C实现PHP扩展 Fetch_Url 类数据抓取的方法
    • C++实现动态绑定代码分享
    • SublimeText编译C开发环境设置
    • 基于C++类型重定义的使用详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有