**自本人知乎回答
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關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...