C 空類知識點學習

2021-10-01 15:45:50 字數 1653 閱讀 3113

1、概述。

空類,是指編譯器不會生成任何成員函式的class。對於空類,編譯器不會生成任何的成員函式,只會生成1個位元組的佔位符。

2、為何emptyclass佔一位元組呢?

如果定義對emptyclass取sizeof()的值為0,那麼該空class例項化出100個物件時,在記憶體位址上就不能區分該class例項化出的物件,這是難以想象及接受的!因此,為了實現每個例項在記憶體中都有乙個獨一無二的位址,編譯器往往會給乙個空類隱含的加乙個位元組的佔位符,這樣空class在例項化後在記憶體獲得獨一無二的位址。

例程:

#include

3、編譯器只會在需要的時候生成6個成員函式和this指標。effective c++告訴我們,這些成員函式,必須public且inline。

①、預設建構函式(default contructor);

②、拷貝建構函式(copy contructor);

③、析構函式(destructor);

④、過載賦值運算子(assignment);

⑤、過載取址運算子(非常成員函式)(&);

⑥、過載取址運算子(常成員函式)(& const);

class

emptyclass_b

;inline emptyclass_b::

emptyclass_b()

//預設構造

inline emptyclass_b::

emptyclass_b

(const emptyclass_b& res)

//拷貝構造

inline emptyclass_b::

~emptyclass_b()

//析構

inline emptyclass_b& emptyclass_b::

operator=(

const emptyclass_b &res)

//過載賦值運算子

inline emptyclass_b* emptyclass_b::

operator&(

)//過載取址運算子(非const成員)

inline

const emptyclass_b* emptyclass_b::

operator&(

)const

//過載取址運算子(const成員)

呼叫:

int

main()

emptyclass_b *pempty2 =

∅//過載取址運算子&(非const)

emptyclass_b *pempty3 =

∅//過載取址運算子&(const)

cin.

get();

return0;

}

入門萌新,淺知拙見,若有斧正,不勝感激。^ - ^

筆試知識點 c 中sizeof(空類) 1

如題,看下面的示例 include class x int main 列印結果是 sizeof x 1 a 140729295724230 b 140729295724231 可以看到,sizeof x 居然不是0,而是1!為什麼呢?之前看過幾篇部落格,都說是為了讓物件能夠有唯一的位址以區別不同的物...

C 類 物件知識點

在類體內不允許對成員函式進行初始化。定義類時,類的資料成員不佔記憶體空間 但是,建立類的物件時,只為每個物件分配用於儲存資料成員的記憶體,不為函式成員分配記憶體。在定義類時,不能定義該類的變數,只能定義該類型別的指標成員和該類型別的引用成員。淺拷貝和深拷貝的區別 當類的資料成員是指標型別時,深拷貝能...

C 類知識點總結

c 類 1.定義抽象資料型別 1 成員函式的宣告必須在類的內部,它的定義既可以在類的內部也可以在類的外部。定義在類內部的函式是隱式的inline函式。this 2 成員函式通過乙個名為this的額外的隱式引數來訪問呼叫他的那個物件。當我們呼叫乙個成員函式時,用請求該函式的物件位址來初始化this。偽...