發新話題

C++ Gossip - 物件導向《多型》 虛擬繼承

C++ Gossip - 物件導向《多型》 虛擬繼承

多重繼承時,會有一種模擬兩可的情況,就是當兩個類別都繼承同一個基底類別,而這兩個類別又同時被另一個類別,以平行多重繼承的方式同時繼承,例如下面的示意圖:



在上圖中,C類別將會擁有兩個A類別的複本,一個來自B1所繼承下來的,一個來自B2所繼承下來的,那麼C類別到底要用B1所繼承下來的?還是B2所繼承下來的?您可以使用「虛擬繼承」(Virtual Inheritance)來解決這個問題。

虛擬繼承是在繼承基底類別時使用"virtual"關鍵字,例如:
class A {
    // 實作
};

class B1 : virtual public A {  // 虛擬繼承
    // 實作
};

class B2 : virtual public A {  // 虛擬繼承
    // 實作
};

class C : public B1, public B2 {
    // 實作
};


在上例中,B1與B2以虛擬繼承的方式繼承了A類別,這個好處是當有類別多重繼承了某個基底類別時,在該類別中將會只有一個基底類別存在,而不會有多個複本,例如在上例中,類別C中將只會有一個基底類別A的存在。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。