C 類預設生產的函式

2021-09-12 21:57:31 字數 634 閱讀 2976

c++預設生成4個成員函式.

預設建構函式(default constructor), 析構函式(destructor), 複製建構函式(copy constructor), 賦值建構函式(assignment);

c++11新增兩個:

move建構函式(右值引用建構函式)

move賦值函式

如果滿足位逐次拷貝(bitwise copy semantics),上述乙個都不會生成

沒有bitwise copy semantics的四種情況:

1、member object的宣告有乙個copy constructor,不論是否是自動生成。

2、繼承的base class的宣告有乙個copy constructor,不論是否是自動生成。

3、class有虛函式

4、父類有虛函式

上述情況是因為:

class animal

};class bear : public animal

};bear b;

animal a = b;

/*如果單純的bitwise copy,那麼a就會指向bear的vptr。a已經丟棄了b的部分屬性,呼叫b的函式將會blow up

*/

C 類的預設函式

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

C 類的預設函式

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

C 類預設函式

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