面試總結之C 類預設預設函式

2021-07-29 02:21:07 字數 1244 閱讀 9743

一、編譯器定義的預設預設函式

編譯器會為每乙個類產生六個預設函式:

建構函式

拷貝建構函式

析構函式

賦值運算子過載

取位址運算子過載

取位址運算子過載(const版)

這六個函式的實現如下:

demo::demo()                       //預設建構函式  

demo::~demo() //析構函式

demo *demo::operator&() //取址運算子(非const)

const demo *demo::operator&() const //取址運算子(const)

demo::demo(const demo &rhs) //拷貝建構函式

demo& demo::operator=(const demo &rhs) //賦值運算子

二、關於空類的大小

空類在定義時並沒有上面說的六個函式,只有乙個位元組的佔位符,當需要用到時編譯器才會生成上面六個函式。

//定義三個類

class foo1 {};

class foo2

;class foo3 :public foo1, public foo2

;

//輸出三個類的大小

cout << sizeof(foo1) << endl;

cout << sizeof(foo2) << endl;

cout << sizeof(foo3) << endl;

//輸出三個例項物件的大小

foo1 f1;

foo2 f2;

foo3 f3;

cout << sizeof(f1) << endl;

cout << sizeof(f2) << endl;

cout << sizeof(f3) << endl;

上面的輸出結果是1 4 4 1 4 4

首先,三個類的大小。foo1是乙個空類,只有乙個位元組的佔位符,foo2有乙個虛函式,所有有乙個指向虛函式的指標,因此foo2的大小是4個位元組。foo3繼承foo1和foo2,取消了foo1的佔位位元組,繼承了foo2的虛函式,也是4個位元組。

類被例項化時編譯器會生成上面的六個函式,但物件的大小仍然跟類一樣。

C 類預設函式

在c 中,乙個類有八個預設函式 預設建構函式 預設拷貝建構函式 預設析構函式 預設過載賦值運算子函式 預設過載取址運算子函式 預設過載取址運算子const函式 預設移動建構函式 c 11 預設過載移動賦值操作符函式 c 11 只是宣告乙個空類,不做任何事情的話,編譯器會自動為你生成乙個預設建構函式 ...

C 類的預設函式

使用者自定義乙個類,簡單的可以看成是乙個新的型別,與c 標準裡面的資料型別使用差不多。但在物件導向程式設計中,我們知道任何乙個物件必須要通過建構函式才能建立,以及可以將乙個物件拷貝給另乙個物件,將乙個物件作為引數傳遞給乙個函式等。c 預設函式 既然是預設函式,那也就是說即便類裡面乙個成員函式沒有,這...

C 類的預設函式

每個成員函式都有乙個指標形參,它的名字是固定的,稱為this指標,this指標是隱式的。但是建構函式沒有這個隱含的this指標。編譯器會對成員函式進行處理,在物件呼叫成員函式時,物件位址作實參傳遞給成員函式的第乙個形參this指標。編譯器會對成員函式進行處理,在物件呼叫成員函式時,物件位址作實參傳遞...