C++中菱形继承的示例分析
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要为大家展示了"C++中菱形继承的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++中菱形继承的示例分析"这篇文章吧。菱形继承clas
千家信息网最后更新 2025年11月08日C++中菱形继承的示例分析
这篇文章主要为大家展示了"C++中菱形继承的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++中菱形继承的示例分析"这篇文章吧。
菱形继承
class Person { int _AA; }; class Student:public Person { int _BB; }; class Teacher :public Person { int _CC; }; class Assistant :public Student, public Teacher { int _DD; };PS:
Assistant的对象中存在两份Person成员
菱形继承存在二义性和数据冗余
解决:
使用虚继承
首先不使用虚继承时:
#includeusing namespace std; class AA { public: string _aa; }; class BB :public AA { public: int _bb; }; class CC :public AA { public: int _cc; }; class DD :public BB, public CC { public: int _dd; }; int main() { DD d; d.BB::_aa = 1; d.CC::_aa = 2; d._bb = 3; d._cc = 4; d._dd = 5; cout << sizeof(d) << endl; return 0; }

菱形继承对象模型:
使用虚继承时:
#includeusing namespace std; class AA { public: string _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; d.BB::_aa = 1; d.CC::_aa = 2; d._bb = 3; d._cc = 4; d._dd = 5; cout << sizeof(d) << endl; return 0; }

菱形虚拟继承对象模型:
两个空格处地址相差为8,第一个空格处存放空格处位置到AA的偏移量为20,第二个空格处存放空格处位置到AA的偏移量为12,浪费两个空间存放偏移量,AA只需计算一次。
以上是"C++中菱形继承的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
菱形
空格
示例
C++
分析
内容
对象
篇文章
偏移
两个
位置
模型
学习
帮助
二义性
冗余
只需
地址
成员
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
梦幻西游多久的服务器会开转服
怎么设计一个数据库
在数据库中存文件
网络安全360回归a股
重庆全过程软件开发流程价目表
网络技术与应用第三章答案
找衣服关于网络安全的画
使命召唤最良心服务器
霸州网络安全
网络安全监察警察
耀鑫网络技术有限公司怎么样
服务器托管用户安全
谷歌使用的数据库
30岁网络安全运维好学吗
微信服务器聊天记录会保留吗
传感器获取数据库
英特尔服务器主板跳线
举例说明事务对数据库的作用
仓山区网络安全办地址
cpu 内存数据库性能
大专学历可以学软件开发吗
安卓 服务器推送
服务器里的文件怎么打印
PSC与船舶网络安全
网络安全 存在 问题
万方数据库文献要付钱吗
服务器加电测试报告
帕拉迪堡垒机如何复制服务器文件
简笔画网络安全手抄报可爱
方舟求服务器