C 繼承 菱形繼承和虛繼承的那些事兒

2021-08-04 13:49:56 字數 1751 閱讀 6496

繼承是c++語言的一種重要機制,該機制自動地為乙個類提供來自另乙個類的操作和資料結構,這使得程式設計師只需在新類中定義已有類中沒有的成分來建立新類。

* 繼承使得我們得以用一種簡單的方式來描述事物

* 物件導向程式設計可以讓你宣告乙個新類作為另乙個類的派生。

* 派生類/子類繼承它父類的屬性和操作。

* 子類同時也宣告了新的屬性和新的操作,剔除了那些不適合於其用途的繼承下來的操作。

* 實現乙個簡單的繼承

class person

protected:

string _name;

};class student:public person

;

**實現如圖:

事實上,繼承的記憶體布局如下所示:

在上述簡單實現繼承的**中,可以看出我們並沒有宣告派生類student的建構函式,根據類的實現機制,派生類物件建立時,將執行其預設的建構函式。

該預設建構函式首先會呼叫基類的預設建構函式,而如果基類沒有預設建構函式的話,但正好匹配預設引數的建構函式,則會呼叫該建構函式。

執行結果如下所示:

值得注意的是,若沒有使用虛繼承,還可以制定類進行呼叫,示例如下:

void test()

執行結果如下所示:

觀察以上兩種方法各自的執行結果圖可知,虛繼承的效率更高,能更好的解決資料冗餘的問題。

綜上所述,在解決菱形繼承的二義性和資料冗餘性問題時,虛繼承是最優的解決方法。

菱形繼承和菱形虛繼承

繼承是c 的一大特點,我們通過菱形繼承和菱形虛繼承對繼承進行進一步的分析。菱形繼承 建立乙個基類a讓b1和b2公有繼承於它,讓c公有繼承b1和b2。class a a int a class b1 public a b1 int b1 class b2 public a b2 int b2 clas...

菱形繼承和虛繼承

1.菱形繼承 菱形繼承概念圖 菱形繼承物件模型 參照菱形繼承物件模型,不難發現若呼叫dd類時,裡面包含兩個相同的aa類的所有成員,在呼叫過程中會出現二義性和資料冗餘的問題,為了解決上述問題,我們提出了虛繼承。接下來通過簡單例項 講解虛函式及底層實現。樣例 include using namespac...

C 多繼承 菱形繼承 虛繼承

b和c都單繼承了a d繼承了b和c 是多繼承 有兩個或兩個以上的基類就是多繼承 class a public int ma class b public a public int mb class c public a public int mc class d public b,public c ...