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 編譯器會按照 位拷貝 的方式提供預設的建構函式 不初始化 預設的賦值建構函式 淺賦值 預設的拷貝建構函式 淺拷貝 預設的析構函式。位拷貝要小心指...