派生類物件模型之菱形繼承派生類物件模型

2021-08-16 21:41:46 字數 924 閱讀 2885

當繼承關係超過兩重後,就不可避免地出現菱形繼承的問題,什麼是菱形繼承呢?我們來看乙個圖:

像這樣,類b1、b2繼承自類a,而類c又與類b1、b2是多繼承的關係,整個繼承關係呈菱形,這就是菱形繼承。那麼菱形繼承存在什麼問題呢?先給出這樣乙個繼承關係:

class a

int a;

};class base1 : public a

int b1;

};class base2 : public a

int b2;

};class derive :public base1, public base2

int d;

};

這裡類base1、base2繼承自類a,而類derive又繼承自類base1與base2,base1與base2和類a的繼承關係屬於單繼承,通過前面的分析,我們已經知道單繼承關係中派生類的物件模型,現在來**一下菱形繼承中最下層的派生類的物件模型。

首先來看一下類base1與base2的記憶體資料存放:

我們知道,類derive與類base1和base2屬於多繼承關係,因此類derive物件的記憶體資料存放是這樣的:

因此可以畫出菱形繼承中最下層的派生類物件模型:

分析完畢,望高手斧正。

派生類物件模型之多繼承派生類物件模型

c 是支援多繼承的,那麼多繼承關係中派生類物件模型和單繼承關係中有什麼不一樣呢?我們來看一看。首先給出乙個多繼承關係 class base1 int b1 class base2 int b2 class derive public base1,public base2 int d 類base1有乙...

C 派生類物件模型

include using namespace std class base virtual base int get const private int num class base1 virtual base1 private int helthy class base2 virtual bas...

繼承和派生類

一 基本概念 繼承是物件導向的程式設計的重要特色之一,它可以有效提高軟體的重用性。若在已有類a的基礎上建立了乙個新類b,則稱類b繼承了類a,類a稱為基類或父類,類b稱為派生類或子類。c 中,繼承又分單一繼承和多重繼承。若派生類只有乙個基類,則稱為單一繼承 若派生類的基類多於乙個,則稱為多重繼承。1 ...