C 類的預設函式

2021-07-25 11:47:42 字數 1833 閱讀 1341

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

c++預設函式

既然是預設函式,那也就是說即便類裡面乙個成員函式沒有,這幾個函式仍然存在(想來也是必然,就算啥成員函式都沒有,但總需要建立物件,賦值,作為引數傳遞等),先看下幾個預設函式長什麼樣,這裡只是為了更加形象的表示,實際類中是看不到這幾個函式的,**一旦類裡面有與這幾個函式同名的函式,那相

應的預設函式都被覆蓋了**

class base;               //預設建構函式

base(const base & cb) //預設拷貝建構函式

base & operator=(const base & cb) //預設「=」運算子過載函式

~base(){} //析構函式

};

預設建構函式用於建立物件,主要有以下兩種方式
class

base;

base cb;

base * pcb = new base();

以上兩種建立物件的方式,均會呼叫預設構造函式呼叫建立物件。由於這裡類b沒有任何建構函式,因此直接呼叫預設建構函式,需要注意,預設建構函式只是為物件申明空間,而並不會將物件成員進行初始化,如下:

class

base;

base cb;

base * pcb = new base();

cout << cb.a << endl;

// cb.a輸出為乙個隨機值

預設拷貝建構函式,主要用在初始化、傳值
class base;

void

fun(base ba);

base fun1();

base cb;

base cb1(cb); //呼叫預設拷貝建構函式

base cb2 = cb; //呼叫預設拷貝建構函式

base cb3;

fun(cb); //呼叫預設拷貝建構函式

cb3 = fun1(); //呼叫預設拷貝建構函式

注意base cb2 = cb; 這裡是初始化,並不是賦值!

預設「=」運算子過載函式, 主要用在賦值語句
class base;

void

fun(base ba);

base cb;

base cb2; //呼叫預設建構函式

cb2 = cb; //呼叫預設「=」操作符過載函式

預設析構函式:在物件銷毀(可以是系統自動銷毀或者使用者主動銷毀)時呼叫。
class

base;

int main()

需要注意預設拷貝建構函式預設「=」操作符過載函式都會檢查物件是否初始化,前面提到過,預設建構函式在建立物件的時候,如果有成員變數,則不會對成員變數進行初始化,因此在利用該物件初始化其它物件或者賦值給其它物件,則會編譯出錯。

class

base;

int main()

使用忠告:

C 類的預設函式

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

C 類預設函式

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

C 類預設生產的函式

c 預設生成4個成員函式.預設建構函式 default constructor 析構函式 destructor 複製建構函式 copy constructor 賦值建構函式 assignment c 11新增兩個 move建構函式 右值引用建構函式 move賦值函式 如果滿足位逐次拷貝 bitwis...