继承虚函数单层需继承的内存图(VC6.0)
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下继承虚函数
继承关系图
class A
{virtual aa(){};
};class B : public virtual A
{char j[3];//入加一个变量是为了看清楚class中的vfptr放在什么置位
public:virtual bb(){};
};
class C : public B
{char i[3];
public:virtual cc(){};
};
#include <iostream>
using namespace std;
int main()
{A aa;int a = sizeof(aa);B bb;int b = sizeof(bb);C cc;int c = sizeof(cc);printf("a= %d\nb=%d\nc=%d\n",a,b,c);return 0;
}
上面是内存图
群体的单步调试内存图如下
美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。
图一 单层虚继承刚到aa时的图
图二 单层继承aa运行完以后的图
从图一可以看出,变量在内存的置位都定下来了(例如bb.j、cc.i、cc.B.j,还有与类有关的a、b、c三个变量),与虚函数有关的aa._vfptr、bb._vfptr等的内存值还是空的(0xcccccccc)然后到了图二以可就看出aa._vfptr的值就定确了,这说明虚函数表针指(vptr)在运行时才定确真正的值。
图三 单层虚继承刚到bb时的图
图四 单层继承bb运行完以后的图
图三与图四的较比可以看出,虚函数针指_vfptr或者vptr在运行时才定确,一样指向virtual base class的类的偏移或者针指也是在运行时定确。
图五 单层虚继承刚到aa时的图
图六 单层继承aa运行完以后的图
图七 虚函数表
虚函数表在程序代码以后,旁边以四个节字的0开隔。
文章结束给大家分享下程序员的一些笑话语录: 苹果与谷歌之争就是封闭收费与自由免费思想之争。(别急着把google来膜拜哦?那可是一家公司,以赚钱为目标的公司!当年我Party就是这样把广大劳动人民吸引过来的。今天的结果你们都看到了。)
继承虚函数单层需继承的内存图(VC6.0)相关推荐
- 【足迹C++primer】52、,转换和继承虚函数
转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding h ...
- 继承----有关虚函数和虚拟继承
可以参考以下文章: http://blog.csdn.net/haoel/archive/2007/12/18/1948051.aspx 陈皓 C++ 虚函数表解析 http://blog.csdn ...
- 【C++基础之十一】虚函数的用法
虚函数的作用和意义,就不进行说明了,这里主要讨论下虚函数的用法. 1.典型的虚函数用法 可以看到,只有标识为virtual的函数才会产生多态的效果,而且是编译多态.它只能借助指针或者引用来达到多态的效 ...
- 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )
文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...
- Visual C++ 2008入门经典 第九章类的继承和虚函数
// 第九章类的继承和虚函数 //.cpp: 主项目文件. //1 继承如何与面向对像的编程思想适应 //2 根据现有类定义新类 //3 使用protected关键字为类成员指定新的访问特性 //4 ...
- 菱形继承,多继承,虚继承、虚表的内存结构全面剖析(逆向分析基础)
// 声明:以下代码均在Win32_Sp3 VC6.0_DEBUG版中调试通过.. 在逆向还原代码的时候,必须得掌握了菱形继承,多继承,虚继承虚函数的内存虚表结构.所以,这篇文章献给正在学习C++ ...
- 详解虚函数的实现过程之菱形继承(5)
大家看到标题,会不会菱形继承的虚表会不会是重复的呢?祖父类的虚表会不会在子类会不会是两份相同呢?那么我们一起来探索一下吧,冲冲冲!! 首先我们来分析一下: 它一共定义了四个类,分别为CFurnitur ...
- C++ 面向对象(二)多态 : 虚函数、多态原理、抽象类、虚函数表、继承与虚函数表
目录 多态 多态的概念 多态的构成条件 虚函数 虚函数的重写 协变(返回值不同) 析构函数的重写(函数名不同) final和override final override 重载, 重写, 重定义对比 ...
- C++编程思想:继承与虚函数以及多态
文章目录 简介 实现虚函数多态的技术原理 对象切边 析构函数和构造函数中的虚函数 使用继承的类的析构函数应该使用虚函数修饰符 简介 继承与虚函数与多态是浑然一体的三个概念,父类中虚函数可以表现出多态特 ...
最新文章
- 《数据挖掘导论》实验课——实验一、数据处理之Numpy
- 深入浅出理解神经网络召回模型的优势
- [转]IIS 允许/禁止 目录浏览
- 点a链接写邮件小技巧
- 大数据之HDFS应用开发(java API)
- java break与continue_java中的break与continue
- Servlet容器原型(三)——Tomcat 4默认连接器浅谈
- 圣地牙哥『华南理工大学南加州校友会』理事会全体理事及部份校友聚会纪实...
- P2922 [USACO08DEC]秘密消息Secret Message
- 页表长度和页表大小_linux内核页表映射机制:线性地址如何转为物理地址?
- QT跨平台使用libvlc播放视频
- Raid0/raid1/raid5磁盘阵列数据恢复思路
- 室内定位导航地图制作问题
- 笔记本电脑内外网(无线和本地网络)优先顺序选择
- 京东云提供全“云”保障 11.11京东累计金额突破1794亿元
- 服务器引擎制作,2.5D-GIS地图引擎设计
- 解决“事件ID(487)的描述(在资源(Zend Optimizer)中)无法找到”问题
- 我和Double Lift的故事(三)——应用篇
- 计算机第一课 纪律 教案,七年级下信息技术第一单元第一课教案
- 知乎里怎么看个人简介_如何做一份优秀的简历?