有虛繼承的類其有幾個虛繼承的基類則該類就有幾個虛表

2021-08-03 18:25:57 字數 557 閱讀 2792

對於下面的測試**(64位系統):c類繼承了a  b 均為虛類,所以在結果中sizeof(c) 結果為32

#include

using namespace std;

class a

private:

int a;

};class  b

float b;

};class c:public a ,public b

static double c;     //靜態成員屬於類不屬於物件,所以sizeof(c) 時,不計算在內

};struct a1

;struct a2

;int main()

{c c;

cout<<"int = "<

分析: c 類繼承了a 類裡有乙個虛表指標和乙個int,位元組對齊以後就是16個位元組,b類中有乙個float和乙個虛表指標,為16位元組,而在c  類繼承了其基類的相應的虛表,並進行了修改(有虛函式的重寫則進行覆蓋,對每乙個有相應虛函式的基類都進行覆蓋,這也是多型的原因,無虛函式的重寫則將派生類的虛函式新增到第乙個基類的虛表的後面,這種沒有多型.)//

多重繼承 虛繼承與虛基類

一 多重繼承 單重繼承 乙個派生類最多只能有乙個基類 多重繼承 乙個派生類可以有多個基類 class 類名 繼承方式 基類1,繼承方式 基類2,派生類同時繼承多個基類的成員,更好的軟體重用 可能會有大量的二義性,多個基類中可能包含同名變數或函式 多重繼承中解決訪問歧義的方法 基類名 資料成員名 或成...

虛繼承和虛基類

虛繼承主要解決在多重繼承中的菱形繼承問題,也就是說 b和c類同時繼承了a類,然後d類繼承了b,c類,那麼d類的虛表就會有重複的函式指標。include using namespace std 虛基類 class person person person string name name name e...

虛基類和虛繼承

這算得上我個人的乙個總結上,其實也算不上什麼原創,只是為了過濾一下前輩的經驗,加深一下自己的記憶 虛繼承的目的是讓某個類做出宣告,承諾願意共享它的基類,被共享的那個基類就是虛基類 includeusing namespace std class a protected int a class b p...