2012-11-03 32 views
2

是否有這樣的一個繼承樹一個問題:C++的多重繼承三角

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 
{ 
}; 
+0

沒有問題。 –

回答

1

編譯明智的有用這種繼承沒有問題。由於來到Child的基地都是virtual繼承。

必須知道的唯一的事情是,雖然建設Parent(),施工順序將Subject()之後Object()。同樣的東西適用於Child()。訂單將爲Subject()Object(),Parent()

+0

好的,如果我理解正確,'Child'只會有一個'單個'Subject接口。另外,如果我不在'public Subject'中使用'virtual',答案是否會保持不變? – Izhaki

+0

@Izhaki,是的,'Child'裏面只有一個'Subject',它是第一個被構建的。不,如果你從'Parent'或'Child'中刪除'virtual',情況就不一樣了。一些編譯器可能支持只有一個'虛擬'繼承,但這是標準所不允許的。所有進入'孩子'**的'主題'必須**被「虛擬」繼承。 – iammilind