C++中菱形继承的示例分析
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"C++中菱形继承的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++中菱形继承的示例分析"这篇文章吧。菱形继承clas
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
科技互联网
互联网科技有限公司图片
互联网金融和金融科技
互联网科技创新企业排名
互联网公司会议桌创意科技软装饰
武汉健翔互联网络科技有限公司
智腾互联网科技有限公司
科技大学互联网
伊宁互联网科技做什么的
深圳互联网科技的发展
北京市互联网新科技
银行科技岗属于互联网吗
互联网营销推广黑科技
本届互联网大会上的黑科技
互联网界的黑科技
艺电能源互联网科技有限公司招聘
云南互联网科技学费
北京军民互联网科技公司
数字互联网科技有限公司
平安好医生打造互联网科技医疗
互联网科技行业发展
互联网科技公司介绍
成都狮子座互联网科技
隆华科技工业互联网
茂名市互联网科技产业园
996高科技互联网公司
高科技互联网套路
本届互联网大会上的黑科技
西安有哪些互联网高科技企业
小牛互联网科技有限公司地址