c++ 虚基类
虚基类,或者说是虚继承更好容易理解一些。
所谓虚基类是指,当一个子类继承父类的时候,使用了virtual关键字
class B:virtual public A
那么基类A就是类B的虚基类。
为什么会有这种现象呢?
这是因为在c++中允许存在多继承,也就是说class D可以同时继承B和C
而 很有可能B和C都是A的子类。
那这就会出现一个问题。在子类D中会不会有多份A的数据? 答案是 确实是有多份。因为编译器要想实现这种智能的话可能要太费力。所以我们要显式的告诉编译器
不要给我多份数据。这就不需要编译器智能判断了。(现在编译器没有这种功能。)解决方式就是在继承的时候使用virtual。
这种需求出现在以下情况,
有一些接口或者是概念上的基类。
然后对基类进行一些详细的扩展。但是这些扩展还只是一些大的概念的扩展。
具体的实现需要对这些基类进行组合。当然理想的方式是类的组合排列。但有些人喜欢多重继承。
如果使用多重继承,就不要忘记使用virtual,尤其是你写一些接口给别人使用的时候。你不知道别人是使用组合呢还是使用多重继承。