C++ C++;多重继承三角形

C++ C++;多重继承三角形,c++,multiple-inheritance,C++,Multiple Inheritance,这种继承树是否存在问题: Parent ---- Subject | / | / Child --/ 或在代码中: class Subject { public: void AddObserver( Observer *aObserver ); protected: ObserversList mObserversList; }; class Parent: public Object, public virtual

这种继承树是否存在问题:

Parent ---- Subject
|         /
|        /
Child --/
或在代码中:

class Subject
{
public:
    void AddObserver( Observer *aObserver );
protected:
    ObserversList mObserversList;
};

class Parent: public Object,
              public virtual Subject
{
};

class Child: public Parent,
             public virtual Subject
{
};

就编译而言,这种继承没有问题。因为
Child
的两个基础都是继承的
virtual


唯一需要知道的是,在构造
Parent()
时,构造顺序将是
Subject()
,然后是
Object()
。同样的事情也适用于
Child()
。顺序将是
Subject()
Object()
Parent()
OK,因此如果我理解正确,
Child
将只有一个“单一”主题界面。另外,如果我不将
虚拟
公共主题
一起使用,答案是否会保持不变?@Izhaki,是的,
将只有一个
主题
基,这是第一个要构建的基。不,如果从
父项
子项
中删除
虚拟
,情况将不一样。有些编译器可能只支持一个
virtual
继承,但这是标准所不允许的。所有的
主题
指向
子对象
必须是
虚拟的
继承的。