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 請看下面的...