【一天一篇CPP】C++的虚基类
来源:互联网 发布:域名在线批量查询 编辑:程序博客网 时间:2024/05/08 02:06
1.一个派生类有多个直接基类,这些基类又有一个共同的基类,如图【画的很随便,就是B和C继承于A,D继承于B和C】
那么D不是有两份A的数据,如果不想保留那么多A的数据,可由使用虚基类。
方法:
class B : virtual A
同时
class C : virtual A
在声明派生类时,指定继承方式的时候声明。这样B和C在派生到D的时候只有一份A的数据了!
2.一个例子:
class A{public:A(int n) : a(n){}int a;};class B : vistual public A{public:B(int n) : A(n){ ......... } //调用A的构造函数};class C : vistual public A{public:C(int n) : A(n){ ........ } //调用A的构造函数};class D : public B, public C{D(int n) :A(n),B(n),C(n){.........}//调用A和B和C的构造函数};//这样在D中只有一份A的数据,它是B和C在继承给D的时候共用的//其中在类D中调用B和C的构造函数的时候不会间接调用A的构造函数【防止不知道调用的先后关系等问题产生的错误】,因此还要D的构造函数直接调用A的构造函数进行构造
在上面这个例子中
D d1;
d1.B::a 和 d1.C::a将是同一个数据!
3.另一个例子,辨识虚继承的作用
假如B和C虚继承于A,而D直接继承于A,E直接继承与B和C和D。
那么B和C在派生到E的时候有一份A的数据,可用 E的对象.B::某个A的成员 和 E的对象.C::某个A的成员名 表示这个成员。
另外D中还有一份A的数据继承到E上,可用 E的对象.D::某个A的成员 表示这个成员。
- 【一天一篇CPP】C++的虚基类
- 【一天一篇CPP】静态成员
- 【一天一篇CPP】类模板
- 【一天一篇CPP】重载运算符的实例
- 【一天一篇CPP】友元和类
- 【一天一篇CPP】inline、类的存储,简单的构造函数、析构函数
- 【一天一篇CPP】对象的动态建立、释放、赋值和赋值
- 【一天一篇CPP】不同类型数据间的转换【转换构造函数、类型转换函数】
- 【一天一篇CPP】派生类的构造函数和析构函数
- 【一天一篇CPP】运算符重载--对部分CPP运算符重载
- 神奇的C&CPP
- C/Cpp的 typedef
- 【一天一篇CPP】基类与派生类的转换(单向:从派生类赋值给基类,舍弃一部分)
- 【一天一篇CPP】对象与指针与数组 对象和const和指针和引用
- 【一天一篇CPP】继承和派生:基础知识和继承方式与访问属性
- .C与.CPP的区别
- cpp和c的区别
- .c与.cpp的应用
- Oracle RAC安装过程中遇到“error while loading shared libraries libpthread.so.0”的解决办法
- JFreeChart
- 面试需要注意的问题
- 最简单的linux tcp网络编程
- 在c语言中用正则表达式实现对email地址和ip地址的验证
- 【一天一篇CPP】C++的虚基类
- 前后台实现对接调试错误解决总结
- c++基本寻址和变量声明,觉得挺好的就分享出来!
- php://input的使用方法
- ios 开发的一些控件综合属性总结
- php判断mysql是否执行写操作
- 最新基于adt-bundle-windows-x86的android开发环境搭建
- 笔记2:文件目录操作
- AS3消息机