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。偽...