c – “多级继承的情况下的虚拟基类”是否具有重要性

请考虑以下显示多级继承的示例代码:

Case1:这里的类derived1是通过虚拟继承从类库派生的,而类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的对象.

> Case2和Case2如何在derived2对象中包含子对象方面有所不同?
> Case1对Case2有意义吗?

PS:我很清楚在多重继承期间虚拟基类的重要性.

最佳答案
如果在继承层次结构中没有基类的多个实例,则(虚拟基类)需要考虑(至少)另外两个问题.

首先,虚拟基类始终由正在构建的派生类和非虚拟基类之前初始化.当中间类在其成员初始化列表中将参数传递给虚基类构造函数时,这一点最为明显.这些初始值设定项将被忽略.它也可以改变基类的构造顺序.

其次,无法从虚拟基类执行static_cast到从其继承的类.

转载注明原文:c – “多级继承的情况下的虚拟基类”是否具有重要性 - 代码日志