2012-07-11 106 views
3

子對象和包含對象的有什麼區別?爲了構造從另一個類派生的類的實例,首先必須創建子對象,然後必須創建派生對象。子對象和包含對象之間的區別

問題:

  1. 這是真的,派生類對象包含子對象?

  2. 一個如何可視化對象的結構上的差異

    a)含有另一個目的

    b)中,其從另一個類

    衍生執行中所涉及的對象)和b)具有相同的結構?

回答

4

是的,派生對象包含其基類子對象的實例。

物理上,包含對象(作爲成員)和派生自對象之間確實沒有區別。此外,該語言同時指代子對象:基類子對象和成員子對象。

虛擬繼承通常會引入一些額外的家庭數據,這使得它比「包含」基本子對象更復雜,但普通繼承通常歸結爲簡單的「包含」。

派生和包含作爲成員之間的區別確實只存在於概念層面。不同的訪問語法,不同的功能。例如,派生參與多態這樣的語言特徵。

1

是的,派生對象包含子對象。這樣說並不是錯的。雖然派生更多一點。數據成員和方法可以直接訪問。虛擬功能需要VMT中的插槽。所有這些在包含對象時都不會發生。

可視化差異。沒有普遍接受的方式來做到這一點。從內存佈局的角度來看,差異在VMT中。包含的對象有自己的VMT字段(如果有的話)。派生對象具有自己的VMT,它通過添加新條目並替換一些條目而在基礎對象的VMT之外創建。

2

在C++中,區別在於虛擬方法。派生類可以重新定義基礎子對象的虛擬方法。包含的對象就像它一樣。這或多或少是基里爾的回答 - 但我希望能有一個簡單的答案。

相關問題