面試實戰之菱形繼承
阿新 • • 發佈:2020-08-11
參考《C++ Primer (第5版)》P718繼承體系的例子,解釋多繼承中的菱形繼承。
問題:預設情況下,派生類中含有繼承鏈上每個類對應的子部分。如果某個類在派生過程中出現了多次,則派生類中將包含該類的多個子物件。
解決之道是“虛繼承”。虛繼承的目的是另某個類做出宣告,承諾願意共享它的基類。在這種機制下,不論虛基類在繼承體系中出現了多少次,在派生類中都只包含唯一一個共享的虛基類子物件。
注意:虛繼承要宣告在Bear和ZooAnimal之間、Raccoon和ZooAnimal之間;Panda是真正的受益者,Panda內只有一個ZooAnimal子物件。
class Raccoon : publicvirtual ZooAnimal { /* ... */ }; class Bear : virtual public ZooAnimal { /* ... */ }; class Panda : public Bear, public Raccoon, public Endangered { /* ... */ };
關鍵字public和virtual的順序隨意。
virtual說明符表明了一種願望,即在後續的派生類當中共享虛基類的同一份例項。