上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下继承虚函数

继承关系图

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)相关推荐

  1. 【足迹C++primer】52、,转换和继承虚函数

    转换和继承,虚函数 Understanding conversions between base and derived classes is essential to understanding h ...

  2. 继承----有关虚函数和虚拟继承

    可以参考以下文章: http://blog.csdn.net/haoel/archive/2007/12/18/1948051.aspx  陈皓 C++ 虚函数表解析 http://blog.csdn ...

  3. 【C++基础之十一】虚函数的用法

    虚函数的作用和意义,就不进行说明了,这里主要讨论下虚函数的用法. 1.典型的虚函数用法 可以看到,只有标识为virtual的函数才会产生多态的效果,而且是编译多态.它只能借助指针或者引用来达到多态的效 ...

  4. 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

    文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...

  5. Visual C++ 2008入门经典 第九章类的继承和虚函数

    // 第九章类的继承和虚函数 //.cpp: 主项目文件. //1 继承如何与面向对像的编程思想适应 //2 根据现有类定义新类 //3 使用protected关键字为类成员指定新的访问特性 //4 ...

  6. 菱形继承,多继承,虚继承、虚表的内存结构全面剖析(逆向分析基础)

    // 声明:以下代码均在Win32_Sp3   VC6.0_DEBUG版中调试通过.. 在逆向还原代码的时候,必须得掌握了菱形继承,多继承,虚继承虚函数的内存虚表结构.所以,这篇文章献给正在学习C++ ...

  7. 详解虚函数的实现过程之菱形继承(5)

    大家看到标题,会不会菱形继承的虚表会不会是重复的呢?祖父类的虚表会不会在子类会不会是两份相同呢?那么我们一起来探索一下吧,冲冲冲!! 首先我们来分析一下: 它一共定义了四个类,分别为CFurnitur ...

  8. C++ 面向对象(二)多态 : 虚函数、多态原理、抽象类、虚函数表、继承与虚函数表

    目录 多态 多态的概念 多态的构成条件 虚函数 虚函数的重写 协变(返回值不同) 析构函数的重写(函数名不同) final和override final override 重载, 重写, 重定义对比 ...

  9. C++编程思想:继承与虚函数以及多态

    文章目录 简介 实现虚函数多态的技术原理 对象切边 析构函数和构造函数中的虚函数 使用继承的类的析构函数应该使用虚函数修饰符 简介 继承与虚函数与多态是浑然一体的三个概念,父类中虚函数可以表现出多态特 ...

最新文章

  1. 《数据挖掘导论》实验课——实验一、数据处理之Numpy
  2. 深入浅出理解神经网络召回模型的优势
  3. [转]IIS 允许/禁止 目录浏览
  4. 点a链接写邮件小技巧
  5. 大数据之HDFS应用开发(java API)
  6. java break与continue_java中的break与continue
  7. Servlet容器原型(三)——Tomcat 4默认连接器浅谈
  8. 圣地牙哥『华南理工大学南加州校友会』理事会全体理事及部份校友聚会纪实...
  9. P2922 [USACO08DEC]秘密消息Secret Message
  10. 页表长度和页表大小_linux内核页表映射机制:线性地址如何转为物理地址?
  11. QT跨平台使用libvlc播放视频
  12. Raid0/raid1/raid5磁盘阵列数据恢复思路
  13. 室内定位导航地图制作问题
  14. 笔记本电脑内外网(无线和本地网络)优先顺序选择
  15. 京东云提供全“云”保障 11.11京东累计金额突破1794亿元
  16. 服务器引擎制作,2.5D-GIS地图引擎设计
  17. 解决“事件ID(487)的描述(在资源(Zend Optimizer)中)无法找到”问题
  18. 我和Double Lift的故事(三)——应用篇
  19. 计算机第一课 纪律 教案,七年级下信息技术第一单元第一课教案
  20. 知乎里怎么看个人简介_如何做一份优秀的简历?

热门文章

  1. 在页面中输入上下居中点号(·)
  2. IEC61499-我们能做些什么?
  3. 关于清理 mac 其他文件的的方法
  4. spring boot实现ssm(1)功能
  5. pytorch训练算法的框架
  6. nyoj--277车牌号
  7. rocksdb原理_RocksDB上锁机制
  8. COUPLE3.0计算过程出现缺少qtintf70.dll文件而无法计算问题解决方法
  9. 多元函数极值、Hessian矩阵、正定矩阵
  10. 71.qt quick-可伸展菜单-抽屉栏示例 通用QML界面(一键换肤)