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
继承,但这是标准所不允许的。所有的主题
指向子对象
必须是虚拟的
继承的。