C 建構函式和析構函式初識

2021-07-26 17:58:12 字數 1856 閱讀 9675

1.

建構函式

建構函式是特殊的成員函式

建立類型別的新物件時,系統會自動呼叫建構函式

建構函式是為了保證物件的每個資料成員都被正確初始化

①建構函式的特點

函式名和類名完全相同

不能定義建構函式的型別(返回型別),也不能使用void

通常情況下建構函式應宣告為公有函式,否則它不能向其他函式那樣顯式地呼叫

建構函式被宣告為私有時有特殊的用途

②預設建構函式:不帶引數的建構函式

如果程式中未宣告建構函式,則系統自動產生出乙個預設建構函式(如果程式中已經定義了建構函式,則系統不會自動生成預設建構函式,需要手動編寫)

③建構函式的過載

乙個類中可以有多個建構函式,編譯器會自動過載

④建構函式與new運算子

定義指標物件時要使用new在堆上進行分配

④全域性物件的建構函式先於main函式

2.

析構函式

析構函式是程式結束時,系統自動呼叫用於釋放空間的

析構函式的函式名和類名相似(前面多了乙個字元「~

」)析構函式沒有返回型別,也沒有引數

析構函式不能被過載

如果沒有定義析構函式,編譯器會自動生成乙個預設析構函式

析構函式是乙個空函式

①析構函式與陣列

如果想要析構函式釋放陣列,必須先用delete釋放陣列空間

②析構函式與delete運算子

delete運算子會引起析構函式的呼叫

③析構函式的顯式呼叫

除了系統自動呼叫,我們也可以在程式中顯式的呼叫析構函式

注意:析構的順序與構造的順序相反

下面用乙個例子來綜合理解上面的幾點

首先,編寫乙個test.h,用於宣告類

#ifndef _test_h_

#define _test_h_

class test

;#endif

接著,編寫test.cpp來外部實現建構函式以及析構函式,我們在建構函式和析構函式中增加了一些列印資訊,以此來觀察構造和析構的順序

#include "test.h"

#include using namespace std;

test::test()

test::test(int x, int y, int z)

test::~test()

最後,編寫main函式,我們在其中定義了兩個物件,乙個指標物件,還有乙個陣列物件,指標必須使用new進行分配,使用delete進行釋放

#include "test.h"

#include int main()

現在我們來看一下結果,可以看到構造和析構的順序,發現指標物件的析構先於陣列,這是因為呼叫了delete釋放指標,delete引起了析構函式的呼叫,所以先對指標進行了析構,之後按照正常順序進行析構

C 建構函式和析構函式

1.建構函式是類的一種特殊方法,每次建立類的例項都會呼叫它。在建立乙個類的例項時,建構函式就像乙個方法一樣被呼叫,但不返回值。語法格式 訪問修飾符 類名 特性 1 其名字必須與類名相同,例如 public class myclass 2 不能被直接呼叫,必須通過new運算子來 呼叫。publiccl...

C 建構函式和析構函式

建構函式 class rectangel rectangel int l,int w 這是帶引數的建構函式,建構函式都是沒有返回值,並且和該類同名 int area 這是另一種形式的內聯函式,把宣告和定義寫在一起的也是內聯函式 private int length int width 析構函式 cl...

c 建構函式和析構函式

1.c 的建構函式有預設建構函式,一般的建構函式,賦值建構函式,拷貝建構函式 複製建構函式 強制型別轉化建構函式。2.如果沒有定義建構函式和析構函式,則c 編譯器會按照 位拷貝 的方式提供預設的建構函式 不初始化 預設的賦值建構函式 淺賦值 預設的拷貝建構函式 淺拷貝 預設的析構函式。位拷貝要小心指...