菱形继承和虚继承
来源:互联网 发布:嵌入式linux终端 编辑:程序博客网 时间:2024/05/30 07:12
1.菱形继承
菱形继承概念图:
菱形继承对象模型:
参照菱形继承对象模型,不难发现若调用DD类时,里面包含两个相同的AA类的所有成员,在调用过程中会出现二义性和数据冗余的问题,为了解决上述问题,我们提出了虚继承。接下来通过简单实例代码讲解虚函数及底层实现。
代码样例:
#include <iostream>using namespace std;class AA{public: int _aa;};class BB : virtual public AA{public: int _bb;};class CC : virtual public AA{public: int _cc;};class DD : public BB,public CC{public: int _dd;};int main(){ DD d; //cout << sizeof(d) << endl; d.BB::_aa = 0; d._bb = 1; d.CC::_aa = 2; d._cc = 3; d._dd = 4; system("pause"); return 0;}
通过代码样例,利用内存调试窗口我们可以观察到内存地址分配以及逐步赋值操作顺序和地址。
图中的20和12是相对于AA地址的偏移地址。通过虚继承(+viryual关键字),DD中重复继承的类AA归于一个,解决了菱形继承中二义性的问题。
通过应用偏移地址,在赋值操作前,将两个相同且重复AA类地址分别赋予不同的偏移地址,保证其正确的存储。AA被分配到最底层的地址,通过内存一步步调试,观察赋值过程。
上图经过内存调试,通过地址可以看出其偏移地址。可以看出中间相差8个字节,通过多占用8个字节的空间,以空间换时间,解决数据冗余的问题。
0 0
- 菱形继承和虚继承
- 菱形继承和虚继承
- 菱形继承和菱形虚继承
- 菱形继承 虚继承
- 菱形继承和虚函数
- 菱形继承和菱形虚继承的对象模型
- C++继承和菱形继承中的虚继承
- (C++)继承、菱形继承和虚继承的那些事儿
- 单继承和菱形继承
- 菱形继承和菱形虚拟继承探索
- C++菱形继承和菱形虚拟继承
- 继承,菱形继承,多态,虚继承、菱形虚拟继承
- 菱形继承与菱形虚继承剖析
- 菱形继承—虚继承
- 菱形继承与虚继承
- C++ 菱形继承&虚继承
- C++菱形继承+虚继承
- 菱形继承中的虚继承
- 在简历中使用STAR法则
- 极简的配置单节点Kubernetes(k8s)集群
- Reversible Primes (20)stoi应用
- 架构师米洛:如何让你的同事对你越来越好
- 面试/笔试数据结构之排序算法篇
- 菱形继承和虚继承
- UIButton点击动画 ---pop动画
- 1html的基本结构
- 看Kubernetes 1.5之后如何称霸容器编排管理界
- [Tarjan算法]最近公共祖先(LCA)问题求解
- apk反编译
- 详述 Java 语言中的大数值
- system、runtime
- lesson6 基于多线程的tcp并发服务器