C++中菱形继承的示例分析
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要为大家展示了"C++中菱形继承的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++中菱形继承的示例分析"这篇文章吧。菱形继承clas
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
命运2服务器不可用
怎么做好阿里云服务器安全
流媒体服务器性能测试点
博威软件开发公司
浙江gps时间服务器时间同步
梦幻西游手游服务器是在哪里查看
陕西省第五届网络安全宣传周
没有服务器怎么部署项目
阳春服务器运维
用友服务器配置
软件开发付款合同书
吉安正规服务器找哪家公司
数据库原理中关系的名词解释
卫星遥感地震应用数据库结构
redis数据库使用教程
银川软件开发需要多少钱
ar软件开发基础
赛茂雅网络技术有限公司可靠吗
完美社区服务器在哪
知法互联网科技有限公司
即时通讯软件开发哪家大
rust里面的服务器是什么意思
金属检测仪系统软件开发
数据库查询结果邮件发送
泸州川诚网络技术有限公司
顺义区正规软件开发诚信经营
pcl启动器无法连接到服务器
ip访问服务器网页
无线网络安全设置网络状态
魔兽怀旧服远程服务器怎么下载