C 建構函式 析構函式

2021-09-27 04:26:24 字數 1480 閱讀 3426

一、建構函式

1、建構函式是乙個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有 乙個合適的初始值,並且在物件的生命週期內只呼叫一次。

建構函式的特徵:

(1)函式名與類名相同。

(2)無返回值。

(3)物件例項化時編譯器自動呼叫對應的建構函式。

(4)建構函式可以過載。

class date

date (int year,int month,int day)//帶參建構函式

private:

int _year;

int _month;

int _year;

};

(5)如果類中沒有顯式定義建構函式,則c++編譯器會自動生成乙個無參的預設建構函式,一旦使用者顯式定 義編譯器將不再生成。

class date

; void test()

(6)無參的建構函式和全預設的建構函式都稱為預設建構函式,並且預設建構函式只能有乙個。注意:無參建構函式、全預設建構函式、我們沒寫編譯器預設生成的建構函式,都可以認為是預設成員函式。

class date//預設建構函式

private:

int _year;

int _month;

int _year;

};

2、拷貝建構函式

只有單個形參,該形參是對本類型別物件的引用(一般常用const修飾),在用已存在的類型別物件建立新物件時由編譯器自動呼叫。

特徵:

(1) 拷貝建構函式是建構函式的乙個過載形式

(2)拷貝建構函式的引數只有乙個且必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。

class date

date(const date& d)

private:

int _year;

int _month;

int _day;

};int main()

(3) 若未顯示定義,系統生成預設的拷貝建構函式

**注意:**若是string類用淺拷貝會出錯(導致多個物件共用一塊記憶體,在銷毀物件時,乙份空間會被釋放多次而錯誤)所以在string類中應自己寫拷貝建構函式。

二、析構函式

1、物件在銷毀時會自動呼叫析構函式,完成類的一些資源清理工作

2、特性:

析構函式是特殊的成員函式。

(1)析構函式名是在類名前加上字元 ~。

(2)無引數無返回值

(3)乙個類有且只有乙個析構函式。若未顯式定義,系統會自動生成預設的析構函式

(4) 物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...

C 建構函式,析構函式

一 建構函式 在建立類的物件時自動呼叫的乙個函式,主要是為物件本身做初始化工作 沒有返回值,名字和類的名字相同,因為是在建立物件時候自動呼叫的,所以必須型別為public的,可以帶引數,可以有多個 如果類中沒有建構函式,在下面三種情況下,會自動的新增預設的建構函式 1.如果類中有虛函式,或者類中有虛...

C 建構函式 析構函式

在學習類的成員方法時,遇到了兩個函式。簡單介紹一下 一 建構函式 建構函式是類中比較特殊的成員函式,它也是一種方法。主要用來為物件分配儲存空間,完成初始化操作,例如給類的成員變數賦值等。一般來說,建構函式一旦開始執行,那麼物件的生命週期就開始了,最終它將以析構函式結束。如果乙個類含有建構函式,在例項...