含有虛函式的類sizeof大小

2021-06-18 17:22:50 字數 715 閱讀 1947

01 #include

02 using namespace std;

04 class base1

06     virtual void fun11(){}

07 public:

08     virtual ~base1();

09 };

11 class base2

13 };

15 class derivedfromone: public base2

16 18     virtual void fun22(){}

19 };

21 class derivedfromtwo: public base1, public base2

22 24 };

26 void main()

27 輸出:

說明:1)乙個類中若有虛函式,(不論是自己的虛函式,還是繼承而來的),那麼類中就有乙個成員變數:虛函式指標,這個指標指向乙個虛函式表,虛函式表的第一項是類的typeinfo資訊,之後的項為此類的所有虛函式的位址。

2)假設經過成員對齊後的類的大小為size個位元組。那麼類的sizeof大小可以這麼計算:size + 4*(虛函式指標的個數n)。**中,derivedfromtwo繼承自2個分支,所以有2個虛函式指標,所以sizeof大小為0 + 4* 2 = 8。

3)帶有虛函式的類的sizeof大小,實際上和虛函式的個數不相關,相關的是虛函式指標。

含有虛函式的類sizeof大小

說明 1 乙個類中若有虛函式,不論是自己的虛函式,還是繼承而來的 那麼類中就有乙個成員變數 虛函式指標,這個指標指向乙個虛函式表,虛函式表的第一項是類的typeinfo資訊,之後的項為此類的所有虛函式的位址。2 假設經過成員對齊後的類的大小為size個位元組。那麼類的sizeof大小可以這麼計算 s...

含有虛函式,虛繼承的類的大小

當類中含有虛繼承時 在vs環境下,linux環境下有歧義 1.派生類物件中會新增乙個指標,該指標指向虛繼承的基類,稱為虛類指標 cptr 每乙個指標只指向其中乙個虛繼承的類,也就是說,虛繼承了幾個類,就會有幾個cptr。2.父類當中的成員變數 虛函式指標 vptr 虛類指標 cptr 仍然會被複製到...

c 空類,含有虛函式的類的大小

1 為何空類的大小不是0呢?為了確保兩個不同物件的位址不同,必須如此。類的例項化是在記憶體中分配一塊位址,每個例項在記憶體中都有獨一無二的二位址。同樣,空類也會例項化,所以編譯器會給空類隱含的新增乙個位元組,這樣空類例項化後就有獨一無二的位址了。所以,空類的sizeof為1,而不是0.2 請看下面的...