成员函数指针有多态的效果吗?
这几天用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
成员函数指针有多态的效果吗?相关推荐
- c++成员函数指针的本质
关于c++成员函数指针的声明,类型定义,赋值和调用就不再赘述了,需要了解的朋友可以看这篇文章: http://www.cppblog.com/colys/archive/2009/08/18/2578 ...
- C++ ---------------- 成员函数指针揭秘
1 前言 2 语法 3 与其它语言机制的混合使用 3.1 继承 3.2 虚函数 3.2 多继承 4 实现 4.1 Microsoft的实现 4.1.1 内部表示 4.1.2 Vcall_addr实现 ...
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
C++ 学习笔记(19)new/delete表达式.定位new.typeid.dynamic_cast.type_info.枚举类型.成员函数指针.union.位域.volatile限定符.链接指示 ...
- c++成员函数指针揭秘
原帖地址 http://blog.csdn.net/xlie/article/details/3031966#_Toc133650388 目 录 1 前言 2 语法 3 与其它语言机制的混合使用 3 ...
- c++中的类成员函数指针
c++中的类成员函数指针 文章目录 c++中的类成员函数指针 发生的事情 正常的函数指针定义 定义类的成员函数指针 std::function 发生的事情 最近,想用一个QMap来创建字符串和一个函数 ...
- C++ 类成员函数指针数组应用(一)
前言 阅读本文之前你需要明确知道函数指针和普通函数的区别,对这两者本文不做过多说明 目标 使用函数指针数组建立一套bpm工作流框架.这套框架在各种oa以及某几个大型通信公司应用的很广泛 适应场景 多分 ...
- C++成员变量指针和成员函数指针【The semantics of funcitons】
原文:https://blog.csdn.net/laojiu_/article/details/68946915 (原文有笔误) 1. #include <cstdio> #includ ...
- 类的成员函数指针和mem_fun适配器的用法
先来看一个最简单的函数: void foo(int a) {cout << a << endl; } 它的函数指针类型为 void (*)(int); 我们可以这样使用: vo ...
- 类成员函数指针的语法
/*类成员函数指针的语法*/ /*****************************类.h文件************************************/ #if !defined ...
- 成员函数指针与高性能的C++委托(三)
委托(delegate) 和成员函数指针不同,你不难发现委托的用处.最重要的,使用委托可以很容易地实现一个Subject/Observer设计模式的改进版[GoF, p. 293].Observer( ...
最新文章
- [hdu5266]区间LCA
- 国产统一操作系统UOS使用体验
- Java通过Pattern类使用正则表达式
- verilog中值滤波算法实现及仿真
- Zabbix安装图解教程
- python函数定义与参数_Python函数的定义方式与函数参数问题实例分析
- 解决Android学习之ScollView嵌套ListView和GridView问题
- sqlserver08评估期已过的解决方法
- 大数据之-Hadoop3.x_MapReduce_全排序案例---大数据之hadoop3.x工作笔记0115
- 转换为正整数_进制之间的转换
- error Microsoft Visual C++ 14.0 is required 解决方案
- 饥饿的时候我想起的小食
- 药品管理系统php,数据库 药品管理系统+源代码
- id 查找apple_Apple ID忘记了怎么办 Apple ID找回方法【详细介绍】
- 人脸识别实践(2) - 人脸识别系统展示
- 3DMAX 隐藏显示物体的快捷键
- 第十七届全国大学生智能汽车竞赛百度创意组来啦
- 如何判断一个对象是否属于某个类
- SharpDevelop出现未找到resgen.exe问题的解决办法
- O2OA接入企业钉钉 - 在钉钉上使用移动办公(新版)
热门文章
- Spring boot 跨域请求实现方式汇总
- Linux 命令之 nohup 后台运行程序,tail 实时查看文件内容
- 阶段3 1.Mybatis_09.Mybatis的多表操作_2 完成account表的建立及实现单表查询
- oracle中使用java存贮过程
- 查看EXE或DLL调用的DLL
- 从数据库查询数据并输出到前台页面
- python购物车进阶(函数)
- 文件上传漏洞及其绕过
- BZOJ 3231: [Sdoi2008]递归数列
- NLTK学习笔记(六):利用机器学习进行文本分类