C (16)物件的構造和析構

2021-08-14 12:57:04 字數 2145 閱讀 9454

定義

1)c++中的類可以定義與類名相同的特殊成員函式,這種與類名相同的成員函式叫做建構函式;

2)建構函式在定義時可以有引數;

3)沒有任何返回型別的宣告。

呼叫

自動呼叫:一般情況下c++編譯器會自動呼叫建構函式

手動呼叫:在一些情況下則需要手工呼叫建構函式

定義

1)c++中的類可以定義乙個特殊的成員函式清理物件,這個特殊的成員函式叫做析構函式

語法:~classname()

2)析構函式沒有引數也沒有任何返回型別的宣告

3)析構函式在物件銷毀時自動被呼叫

呼叫

c++編譯器自動呼叫

示例程式

#include #include using namespace std;

class student

// 析構函式:函式和類名相同,函式前加乙個 ~ ,析構函式沒有返回值

// **物件資源,當物件被釋放的時候 系統自動呼叫析構函式**物件資源

~student()

private:

int m_age;

char m_name[20];

};int main()

cout << "hello world" << endl;

return 0;

}執行結果:

建構函式被呼叫

------------

析構函式被呼叫

hello wrold

class  test1

// 物件做函式引數

int main1_4()

void func(test1_1 obj)執行結果:

兩個引數的建構函式被呼叫

拷貝建構函式被呼叫

a = 1,b = 2

析構函式被呼叫

析構函式被呼叫

void func(test1_1 &obj) 執行結果:

兩個引數的建構函式被呼叫

a = 1,b = 2

析構函式被呼叫

test1_1 func()

// 物件做函式返回值

int main1_5()

func()執行結果:

無參建構函式被呼叫

拷貝建構函式被呼叫

析構函式被呼叫

析構函式被呼叫

---------------------

test1_1 t = func()執行結果:

無參建構函式被呼叫

拷貝建構函式被呼叫

析構函式被呼叫

---------------------

析構函式被呼叫

test1_1 t2;

t2 = func();

執行結果:

無參建構函式被呼叫

無參建構函式被呼叫

拷貝建構函式被呼叫

析構函式被呼叫

析構函式被呼叫

---------------------

析構函式被呼叫

test1_1 &t3 = func()執行結果:

無參建構函式被呼叫

拷貝建構函式被呼叫

析構函式被呼叫

---------------------

析構函式被呼叫

1)當類中沒有定義任何乙個建構函式時,c++編譯器會提供預設無參建構函式和預設拷貝建構函式

2)當類中定義了拷貝建構函式時,c++編譯器不會提供無引數建構函式

3)當類中定義了任意的非拷貝建構函式(即:當類中提供了有參建構函式或無參建構函式),c++編譯器不會提供預設無參建構函式

4 )預設拷貝建構函式成員變數簡單賦值

總結:只要你寫了建構函式,那麼你必須用。

構造析構階段性總結

1)建構函式是c++中用於初始化物件狀態的特殊函式

2)建構函式在物件建立時自動被呼叫

3)建構函式和普通成員函式都遵循過載規則

4)拷貝建構函式是物件正確初始化的重要保證

5)必要的時候,必須手工編寫拷貝建構函式

類和物件(3) 物件的構造和析構

如果不用建構函式初始化,該怎麼辦 為每個類都提供乙個public的initialize函式 物件建立後立即呼叫initialize函式進行初始化。缺點1 initialize只是乙個普通的函式,必須顯示的呼叫 2 一旦由於失誤的原因,物件沒有初始化,那麼結果將是不確定的 沒有初始化的物件,其內部成員...

6 1 物件的構造與析構

物件在被建立時就會呼叫其建構函式 若在乙個區段中有乙個以上的離開點,則析構函式必須放在每個離開點前 eg 析構函式 儘管程式不會執行到這裡,但在物件的生命結束期末尾也會呼叫析構函式 把物件盡可能的放置在使用它的程式區段附近,可以節省非必要的物件產生操作和銷毀操作 全域性物件如果有建構函式與析構函式的...

C 多個物件構造 析構 構造和析構的順序

include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...