| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> c++虚拟继承那些事 -> 正文阅读 |
|
[C++知识库]c++虚拟继承那些事 |
[@toc] 在c++中,会遇到菱形继承的情况。 内存情况c++内存模型告诉我们,当我们创建一个派生类对象B时,同时会创建一个父类的A对象。 测试代码如下:
输出代码是
可以看出,A对象被创建了两次。 虚拟继承为了解决这个问题,c++引入了虚拟继承,即 BC virtual 继承A
这种情况下的输入情况是
可以看到A 只被构建了一次。 这就完了吗? 当然不是,接下来分析更复杂的情况,比如
原理分析A 在哪里构建?在B C D的视角中,A的constructor 我们称为virtual base class constructor。对于他的初始化,有这么个规律 在书中,我们看到维持这个机制的做法是,在 BC 的构造函数中设置一个检查flag,只有当flag为true时,才会构建A。
这种情况,flag是有B设置,为true. A 会被构建出来。
这种情况,在D的构造函数中,D会把flag设为false,然后构建B。 B也就无法构建A了。 具体参考 深度探索c++ 第五章 构造析构拷贝语义 , 代码就不贴了。 有参数情形如下案例代码
主要观察D 的两种构造函数,如果是 输出结果是:
scenario2
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:28:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |