在这里想跟大家一起来探索一下菱形继承的类对象如何来执行构造函数,以及析构函数




这展示了子类CSofaBed的构造过程,它的特别之处是在调用时要传入一个参数,这个参数是一个标志信息。构造函数中要先构造父类,然后构造自己。CSofaBed的两个父类有一个共同的父类,如果没有构造标记,它们共同的父类将会被构造两次,因此要使用构造标记来防止重复构造的问题,构造顺序如下:

a.CFurniture
b.CSofa(根据标记跳过CFurniture构造)
c.CBed(根据标记跳过CFurniture构造)
d.CSofaBed自身

CSofaBed也使用了构造标记,当CSofaBed也是父类时,这个标记将产生作用,跳过所有父类的构造,只构造自身。当标记为1时,则构造父亲;当标记为0时,则跳过构造函数。

构造时可以使用标记来防止重复构造,同样也不能出现重复析构错误,那么又是如何实现的呢?还是利用标记吗?下面我们一起来看看



菱形结构中的子类析构函数执行流程并没有像构造函数那样使用标记来防止重复析构,而是将祖父类最后调用。先依次执行两个父类CBed和CSofa的析构函数,然后执行祖父类的析构函数。

详解虚函数的实现过程之菱形继承修罗场(6)相关推荐

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

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

  2. 详解虚函数的实现过程之单继承(2)

    从汇编分析一下下面的多态模拟结构 利用 父类指针指向子类的特性,可以间接调用各子类中的虚函数. 虽然指针类型为父类,但由于虚表的排列顺序是按虚函数在类继承层次中首次声明的顺序依次排列的,因此,只要继承 ...

  3. 详解虚函数的实现过程之虚基类(4)

    博客虚函数实现过程3 时提到过虚基类,这里呢,我们来详细讲述一下: 当我们在虚函数的声明结尾处添加"=0",这种虚函数就被称为纯虚函数. 它好似一个没有实现只有声明的函数,它的存在 ...

  4. 详解虚函数的实现过程之多重继承(3)

    下面来一起探索一下多重继承时,有虚函数会怎么继承呢? 这里大家猜一下,SofaBed会占多少个字节呢? 首先我们是不是得猜一下它有几个虚表指针? 4* 4(4个int数据)+2*4(两个虚表指针)=2 ...

  5. 详解虚函数的实现过程之初探虚表(1)

    空对象它有一字节的大小,在没有任何成员变量但是却有虚函数的对象里,它的大小是四个字节,这是为什么呢? 因为含有虚函数的对象里,对象的起始地址往后四个字节其实是 一个指针,它指向了一个数组,这个数组的元 ...

  6. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  7. 一分钟详解initUndistortRectifyMap函数bug修复方法

    本文首发于微信公众号「3D视觉工坊」--一分钟详解initUndistortRectifyMap函数bug修复方法 在上一篇文章OpenCV中initUndistortRectifyMap函数存在bu ...

  8. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  9. 详解Scala函数也是对象的特性

    详解Scala函数也是对象的特性

最新文章

  1. 计算机的网络通信软件的作用,网络协议软件的作用是什么
  2. 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程
  3. 别做喷子,多去钻研!
  4. matlab全景图像拼接_带你认识网络高清全景监控摄像机
  5. asp导出EXCEL数字格式及自动适应宽度的问题
  6. python返回类型为anytype_python判断变量类型时,为什么不推荐使用type()方法
  7. Linux桌面环境GNOME实用技巧
  8. nyoj 610 定长覆盖 贪心问题系列
  9. R语言分类变量的统计描述
  10. linux wav 转mp3,linux下wav转换为mp3
  11. STM32应用开发实践教程:初识STM32
  12. [BZOJ2959] 长跑
  13. Linux4.13显卡切换,LINUX下手动切换双显卡或禁用其中一块显卡的解决办法
  14. “远程网络教学系统”UML用例图(练习题)
  15. 【2022考石开正攵★氵台】思维导图
  16. linux设置法语键盘布局,法语键盘布局图.doc
  17. 第4周项目4:程序分析(2)
  18. JS实现闪烁星空效果
  19. ubuntu相关软件安装
  20. CEO的1元年薪起源

热门文章

  1. Python之fastai:fastai库的简介、安装、使用方法之详细攻略
  2. 蓝桥杯_算法训练_关联矩阵
  3. asp.net 二级域名(路由方式实现)
  4. CDOJ 1070 秋实大哥打游戏 带权并查集
  5. 老徐杂谈:年后的第一个双休,你在做什么?
  6. [痛并快乐着 国外开发者总结欧美游戏坑钱指南] 讀後感想
  7. hdu 4268 Alice and Bob(STL版)
  8. 构造函数 Create 与 析构函数 Destroy
  9. shell 常用命令
  10. VC由进程ID获取窗口句柄的各种方