虛繼承,虛函式和虛指標之間的關係

2021-10-06 12:46:42 字數 867 閱讀 9894

**自本人知乎回答

1.在乙個虛繼承的體系中,所有類都沒有虛函式,那麼這些類的物件模型中存不存在vptr?

2.在乙個類的物件模型中,存在vptr的充要條件是什麼?

3.a類的物件模型中有vptr__a,b類普通繼承a類。b類需要滿足什麼條件,其物件模型中,除了含有vptr__a以外,還含有vptr__b?

4.a類的物件模型中有vptr__a,b類虛擬繼承a類。b類需要滿足什麼條件,其物件模型中,除了含有vptr__a以外,還含有vptr__b?

最好明確一下,虛指標vptr指的什麼,vptr常指的是vfptr,用於實現虛函式的功能,指向虛表,而還有乙個vbptr,用於實現虛繼承,指向乙個偏移量表(vfptr與vbptr各佔乙個指標的記憶體,至少msvc是這樣的)。

正面回答一下

1,對大部分編譯器,不存在vfptr,對於msvc,存在vbptr

alignment member是記憶體對齊,面試又乙個考點來了

2,對msvc,存在虛函式則存在vfptr,存在虛繼承則存在vbptr

3,恐怕派生類物件不會多出乙個額外虛指標

4,對於msvc,b物件既有vbptr,也有vfptr

虛繼承和虛函式繼承

虛繼承主要用於菱形 形式的繼承形式 虛繼承是為了在多繼承的時候避免引發歧義,比如類 有個就是a,繼承了 c也繼承了 當 多繼承 時,就會有歧義產生了,所以要使用虛擬繼承避免重複拷貝。虛函式繼承是解決多型性的,當用基類指標指向派生類物件的時候,基類指標呼叫虛函式的時候會自動呼叫派生類的虛函式,這就是多...

虛繼承 虛表 虛指標

c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 因為...

虛函式 虛指標和虛表

關於虛函式的背景知識 用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...