考虑以下显示多级继承的示例代码:
案例1:这里是班级derived1
是从类派生的base
通过虚拟继承和类derived2
是从类派生的derived1
直接地。
class base
{
};
class derived1 : virtual public base
{
};
class derived2 : public derived1
{
};
Case2:与Case1相同,只是不涉及虚拟继承
class base
{
};
class derived1 : public base // no virtual inheritance
{
};
class derived2 : public derived1
{
};
假设我创建了该类的一个对象derived2
在这两种情况下。
Case1 和 Case2 在子对象的包含方面有何不同derived2
?
Case1 比 Case2 更重要吗?
PS:我很清楚虚拟基类在多重继承过程中的重要性。
如果继承层次结构中没有基类的多个实例,则(至少)还有两个问题需要考虑virtual
基类。
首先,虚拟基类始终由构造中的最近派生类在非虚拟基类之前初始化。当中间类将参数传递给其成员初始化列表中的虚拟基类构造函数时,这一点最为明显。这些初始化器将被忽略。它还可以改变基类的构造顺序。
其次,无法执行static_cast
从虚拟基类到继承它的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)