这几天用bind的时候想到一个问题,成员函数指针有多态的效果吗?

我一直以为没有,测试之后发现是可以的,我对成员函数指针的理解有误

虚成员函数指针的调用过程是先调用函数vcall,vcall根据this寻址虚函数表然后去调用实际的函数,对于虚表上的每个索引x的函数都是使用vcall{x}进行调用

所以同一虚函数的父类和基类的成员函数指针的值是一样的,他们都指向vall{x}

所以成员函数指针是能够实现多态的

我在http://www.cnblogs.com/mightofcode/archive/2013/03/03/2939439.html里面关于成员函数指针的部分写的有点问题

注意:这里说的是成员函数指针的调用过程,跟直接调用CLASS.foo() 或者PCLASS->foo()是不一样的

调用过程:

虚成员函数调用:
(pa->*ff1)();
013117FE  mov         esi,esp
01311800  mov         ecx,dword ptr [ebp-44h]
01311803  call        dword ptr [ebp-50h]  调用vcall
fooA::`vcall'{4}':
0130C5EB  jmp         fooA::`vcall'{4}' (1314C70h)vcall寻址虚表,找到实际函数地址
fooA::`vcall'{4}':
01314C70  mov         eax,dword ptr [ecx]
01314C72  jmp         dword ptr [eax+4]  

转载于:https://www.cnblogs.com/mightofcode/archive/2013/03/31/2991823.html

成员函数指针有多态的效果吗?相关推荐

  1. c++成员函数指针的本质

    关于c++成员函数指针的声明,类型定义,赋值和调用就不再赘述了,需要了解的朋友可以看这篇文章: http://www.cppblog.com/colys/archive/2009/08/18/2578 ...

  2. C++ ---------------- 成员函数指针揭秘

    1 前言 2 语法 3 与其它语言机制的混合使用 3.1 继承 3.2 虚函数 3.2 多继承 4 实现 4.1 Microsoft的实现 4.1.1 内部表示 4.1.2 Vcall_addr实现 ...

  3. C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示

    C++ 学习笔记(19)new/delete表达式.定位new.typeid.dynamic_cast.type_info.枚举类型.成员函数指针.union.位域.volatile限定符.链接指示 ...

  4. c++成员函数指针揭秘

    原帖地址  http://blog.csdn.net/xlie/article/details/3031966#_Toc133650388 目 录 1 前言 2 语法 3 与其它语言机制的混合使用 3 ...

  5. c++中的类成员函数指针

    c++中的类成员函数指针 文章目录 c++中的类成员函数指针 发生的事情 正常的函数指针定义 定义类的成员函数指针 std::function 发生的事情 最近,想用一个QMap来创建字符串和一个函数 ...

  6. C++ 类成员函数指针数组应用(一)

    前言 阅读本文之前你需要明确知道函数指针和普通函数的区别,对这两者本文不做过多说明 目标 使用函数指针数组建立一套bpm工作流框架.这套框架在各种oa以及某几个大型通信公司应用的很广泛 适应场景 多分 ...

  7. C++成员变量指针和成员函数指针【The semantics of funcitons】

    原文:https://blog.csdn.net/laojiu_/article/details/68946915 (原文有笔误) 1. #include <cstdio> #includ ...

  8. 类的成员函数指针和mem_fun适配器的用法

    先来看一个最简单的函数: void foo(int a) {cout << a << endl; } 它的函数指针类型为 void (*)(int); 我们可以这样使用: vo ...

  9. 类成员函数指针的语法

    /*类成员函数指针的语法*/ /*****************************类.h文件************************************/ #if !defined ...

  10. 成员函数指针与高性能的C++委托(三)

    委托(delegate) 和成员函数指针不同,你不难发现委托的用处.最重要的,使用委托可以很容易地实现一个Subject/Observer设计模式的改进版[GoF, p. 293].Observer( ...

最新文章

  1. [hdu5266]区间LCA
  2. 国产统一操作系统UOS使用体验
  3. Java通过Pattern类使用正则表达式
  4. verilog中值滤波算法实现及仿真
  5. Zabbix安装图解教程
  6. python函数定义与参数_Python函数的定义方式与函数参数问题实例分析
  7. 解决Android学习之ScollView嵌套ListView和GridView问题
  8. sqlserver08评估期已过的解决方法
  9. 大数据之-Hadoop3.x_MapReduce_全排序案例---大数据之hadoop3.x工作笔记0115
  10. 转换为正整数_进制之间的转换
  11. error Microsoft Visual C++ 14.0 is required 解决方案
  12. 饥饿的时候我想起的小食
  13. 药品管理系统php,数据库 药品管理系统+源代码
  14. id 查找apple_Apple ID忘记了怎么办 Apple ID找回方法【详细介绍】
  15. 人脸识别实践(2) - 人脸识别系统展示
  16. 3DMAX 隐藏显示物体的快捷键
  17. 第十七届全国大学生智能汽车竞赛百度创意组来啦
  18. 如何判断一个对象是否属于某个类
  19. SharpDevelop出现未找到resgen.exe问题的解决办法
  20. O2OA接入企业钉钉 - 在钉钉上使用移动办公(新版)

热门文章

  1. Spring boot 跨域请求实现方式汇总
  2. Linux 命令之 nohup 后台运行程序,tail 实时查看文件内容
  3. 阶段3 1.Mybatis_09.Mybatis的多表操作_2 完成account表的建立及实现单表查询
  4. oracle中使用java存贮过程
  5. 查看EXE或DLL调用的DLL
  6. 从数据库查询数据并输出到前台页面
  7. python购物车进阶(函数)
  8. 文件上传漏洞及其绕过
  9. BZOJ 3231: [Sdoi2008]递归数列
  10. NLTK学习笔记(六):利用机器学习进行文本分类