[英]virtual vs non-virtual multiple inheritance in c++
我很想嘗試掌握c ++中的多個虛擬/非虛擬繼承的概念。 如果我正確地理解了B類和C類是否實際上從A類繼承,則它們共享一種單例對象,即它們都訪問一個公共對象A的相同字段。多重繼承將為任何B和C對象創建單獨的A對象。
綜上所述,有誰會這么友善並以簡單,實際的方式提出建議? 為什么首先要多重繼承,然后為什么要虛擬/非虛擬?
謝謝。
C ++中不經常使用多重繼承。 在大多數情況下,它是接口/實現的混合。 也不是禁止的。 (虛擬)多重繼承的需求來自於從一個通用基類派生的設計決策:
class Window
{ /* draw, show, hide, background ... */ };
class WindowWithBorder : public virtual Window
{ /* methods to manipulate / draw border ... */ };
class WindowWithMenu : public virtual Window
{ /* methods to manipulate / draw Menu ... */ };
class MyWindow : public WindowWithBorder, public WindowWithMenu
{ /* now it's your turn ... */ };
庫執行者必須預見那些菱形的繼承圖。 沒有virtual
話,會有兩個基本的Window
對象,而virtual
的只有一個,而不是一個單例,因為可以有很多窗口。
庫通常(但並非在每種情況下)都可以避免這種情況,例如,通過實現復合設計模式 ,具有“胖”基類,通過實現抽象接口類或通過使用具有特征/策略的模板。
我建議閱讀Bjarne Stroustrup的C ++編程語言中的類層次結構一章(第3版的第15章,從中借用了示例)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.