C++菱形继承面试题
来源:互联网 发布:无线网速监控软件 编辑:程序博客网 时间:2024/06/11 02:56
问题:1.虚拟继承的作用
2.底层的工作原理
1.作用:
#include <iostream>using namespace std;class AA{public:int _aa;};class BB : public AA{public:int _bb;};class CC : public AA{public:int _cc;};class DD : public BB, public CC{public:int _dd;};void Test(){DD d;d.BB::_aa = 0;d.CC::_aa = 1;d._bb = 2;d._cc = 3;d._dd = 4;cout << sizeof(BB) << endl;//12}int main(){Test();return 0;}在这个代码中DD中有了两份AA成员,菱形继承存在二义性和数据冗余问题
因此引进了虚拟继承解决了菱形继承的二义性和数据冗余
2.原理
这是菱形继承的内存图
代码为1中的代码
虚拟继承 加virtual
代码如下:
#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;};void Test(){DD d;d.BB::_aa = 0;d.CC::_aa = 1;d._bb = 2;d._cc = 3;d._dd = 4;cout << sizeof(BB) << endl;//12}int main(){Test();return 0;}内存图如下:
0 0
- C++菱形继承面试题
- 【C++】菱形继承
- 【c++】菱形继承
- 【c++】菱形继承
- 【C++】继承(菱形继承)
- <c++>继承及菱形继承
- c 一道面试题【继承,多态】
- 【C++】菱形继承与虚拟菱形继承的对比分析
- C++:菱形继承和虚拟继承
- 【面试题】如何循环打印菱形?
- JAVA面试题(继承)
- 继承的面试题
- 继承面试题2
- 继承相关面试题
- (C++)继承、菱形继承和虚继承的那些事儿
- 【C++】菱形虚拟继承(内存布局)
- 【c++】菱形虚拟虚拟继承模型探索
- C++: 虚表和菱形虚拟继承
- 【matlab】 动态绘制三维心形图
- Webpack简介使用教程
- CCF之集合竞价(java)
- synchronized
- 信号量与自旋锁的区别
- C++菱形继承面试题
- WebService学习总结(三)--WebServic发布
- SylixOS中间件移植方法总结
- php求两个文件的相对路径
- Nginx负载均衡配置
- Ogre的WeaponTrail
- AngularJS简单介绍
- 002_Windows程序设计--Unicode
- 面向对象的三个基本特征是:封装、继承、多态及其五大原则