使用sizeof計算虛繼承的類物件的空間大小

2021-07-30 03:55:06 字數 849 閱讀 1217

#include using namespace std;  

class a

;class b

;class c:public a,public b

;class d:virtual public a

;class e:virtual public a,virtual public b

;class f

;int f::b = 10 ;

int main()

{ cout<<"sizeof(a) = "<

解析:

(1)**第35行,由於a是空類,編譯器會安插乙個char給空類,用來標記它的每乙個物件。因此其大小為1個位元組

(2)**第36行,類b大小和a相同,都是1個位元組

(3)**第37行,類c是多繼承a和b,其大小仍然為1個位元組

(4)**第38行,類d是虛繼承自a,編譯器為該類安插乙個指向父類的指標,指標大小為4.由於此類有了指標,編譯器不會安插乙個char了。因此其大小是4個位元組。

(5)**第39行,類e虛繼承自a並且也虛繼承自b,因此它有指向父類a的指標與父類b的指標,加起來大小為8個位元組

(6)**第40行,類f含有乙個靜態成員變數,這個靜態成員的空間不在類的例項中,而是像全域性變數一樣在靜態儲存區中,被每乙個類的例項共享,因此其大小是4個位元組。

答案為:

sizeof(a) = 1 

sizeof(b) = 1

sizeof(c) = 1

sizeof(d) = 4

sizeof(e) = 8

sizeof(f) = 4

類大小 sizeof 研究(虛繼承)

class top 基類的虛表入口,4位元組 接著看left跟right都是16位元組。本來除了top的8位元組,left裡只有int y 佔4位元組,還有4位元組佔在那裡?由於是虛繼承,虛繼承的子類都要包含乙個指向基類的指標,從而實現動態聯編。一次,要額外加4位元組的空間。所以一共是8 4 4 1...

類的sizeof(虛函式,虛繼承,空類是1)

1 空類的sizeof是1。空類是指沒有成員的類,類中的函式不佔空間,除非是虛函式。如 class a a void fun sizeof a 是1.注 class a1 a1 void fun char a 0 sizeof a1 也是1.vc6.0下編譯 2 若類中包含成員,則類物件的大小只包括...

繼承類的sizeof

123 4567 891011 1213 1415 1617 1819 20 class base class derived public base intmain 對於base a4位元組,b1位元組,3位元組對齊,共8位元組。對於derived d並沒有和b存在一起,而是在3位元組之外 bas...