二 c 類的大小

2021-08-01 07:09:56 字數 1469 閱讀 7065

1. 空類

classa

;

voidmain()

得到結果為:1。

類的例項化就是給每個例項在記憶體中分配一塊位址。空類被例項化時,會由編譯器隱含的新增乙個位元組。所以空類的size為1。

2.虛函式

classa

;

得到結果:4

當c++ 類中有虛函式的時候,會有乙個指向虛函式表的指標(vptr),在32位系統分配指標大小為4位元組。所以size為4.

3.靜態資料成員

classa

;

得到結果:8

靜態資料成員被編譯器放在程式的乙個global data members中,它是類的乙個資料成員.但是它不影響類的大小,不管這個類實際產生了多少例項,還是派生了多少新的類,靜態成員資料在類中永遠只有乙個實體存在,而類的非靜態資料成員只有被例項化的時候,他們才存在.但是類的靜態資料成員一旦被宣告,無論類是否被例項化,它都已存在.可以這麼說,類的靜態資料成員是一種特殊的全域性變數.

所以該類的size為:int型4位元組加上虛函式表指標4位元組,等於8位元組。

4.普通成員函式

classa

結果:1

類的大小與它的建構函式、析構函式和其他成員函式無關,只已它的資料成員有關。

5.普通繼承

classa

;

classb

;

classc :publica,publicb

;

結果為:sizeof(c) =12.

可見普通的繼承,就是基類的大小,加上派生類自身成員的大小。

6.虛擬繼承

classc :virtualpublica,virtualpublicb

;

結果:16.

當存在虛擬繼承時,派生類中會有乙個指向虛基類表的指標。所以其大小應為普通繼承的大小(12位元組),再加上虛基類表的指標大小(4個位元組),共16位元組。

**:

c 類的大小

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...

C 類的大小

乙個空類class a 的大小為什麼是1,因為如果不是1,當定義這個類的物件陣列時候a objects 5 objects 0 和objects 1 就在同乙個位址處,就無法區分。單繼承 includeusing namespace std class aprivate char k 3 class...

C 類的大小

前言 c 類所占用的記憶體空間實際上是指類的例項所占用的記憶體空間。其大小是由類中的成員變數決定的 靜態成員變數除外 由於成員函式放到 區由類的各個例項共享,故成員函式對類占用記憶體大小沒有影響。具體地說,類占用記憶體大小由以下三個方面決定 1.非靜態成員變數的記憶體占用之和 2.考慮記憶體對其的問...