例子一
class a
;
class b
};
class c
virtual void func1()
};
class d: public a, public c
virtual void func1()
};
class e: public b, public c
virtual void func1()
};
int main(void)
virtual void aa2()
private:
char ch[3];
};
class b: virtual public a
virtual void bb2()
};
int main(void)
{ cout<<"a's size is "b's size is 16
說明:對於虛繼承,類b因為有自己的虛函式,所以它本身有乙個虛指標,指向自己的虛表。另外,類b虛繼承類a時,首先要通過加入乙個虛指標來指向父類a,然後還要包含父類a的所有內容。因此是4+4+8=16。
C 中虛函式繼承類的記憶體占用大小計算
位元組對齊的原理見鏈結注意64位系統虛函式指標佔8位元組,32位佔4位元組 原帖中寫到 求sizeof d 的時候,需要明白,首先vptr指向的虛函式表中儲存的是類d中的兩個虛函式的位址 只有乙個虛基類位址指標 然後存放基類c中的兩個資料成員ch1 ch2,注意記憶體對齊,然後存放資料成員d,這樣4...
c 類大小(涵蓋繼承 虛繼承 虛函式表)
涉及到c 中求類大小時需要特別注意一下幾點 為類的非靜態成員資料的型別大小之和 有編譯器額外加入的成員變數的大小,用來支援語言的某些特性 如 指向虛函式的指標 虛繼承 多重繼承 為了優化訪問效率,進行的邊緣調整 與類中的建構函式,析構函式以及其他的成員函式無關 5.私有繼承,會去繼承之前的私有成員變...
含有虛函式,虛繼承的類的大小
當類中含有虛繼承時 在vs環境下,linux環境下有歧義 1.派生類物件中會新增乙個指標,該指標指向虛繼承的基類,稱為虛類指標 cptr 每乙個指標只指向其中乙個虛繼承的類,也就是說,虛繼承了幾個類,就會有幾個cptr。2.父類當中的成員變數 虛函式指標 vptr 虛類指標 cptr 仍然會被複製到...