c 建構函式與析構函式

2021-09-13 01:54:53 字數 1356 閱讀 4200

1.建構函式:

建構函式 ,是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。

如果建立乙個類你沒有寫任何建構函式,則系統會自動生成預設的無參建構函式,函式為空,什麼都不做只要寫了乙個其他的某一種建構函式,系統就不會再自動生成這樣乙個預設的建構函式,如果希望有乙個這樣的無參建構函式,則需要自己顯示地寫出來。 

一般建構函式可以有各種引數形式,乙個類可以有多個一般建構函式,前提是引數的個數或者型別不同(基於c++的過載函式原理),建立物件時根據傳入的引數不同呼叫不同的建構函式。

複製建構函式(也稱為拷貝建構函式),複製構造函式引數為類物件本身的引用,用於根據乙個已存在的物件複製出乙個新的該類的物件,一般在函式中會將已存在物件的資料成員的值複製乙份到新建立的物件中,若沒有顯示的寫複製建構函式,則系統會預設建立乙個複製建構函式,但當類中有指標成員時,由系統預設建立該複製建構函式會存在風險,具體原因請查詢 有關 「淺拷貝」 、「深拷貝」的文章論述。

型別轉換建構函式,根據乙個指定的型別的物件建立乙個本類的物件,需要注意的一點是,這個其實就是一般的建構函式,但是對於出現這種單引數的建構函式,c++會預設將引數對應的型別轉換為該類型別,有時候這種隱私的轉換是我們所不想要的,所以需要使用explicit來限制這種轉換。

賦值建構函式,注意這個類似複製建構函式,將=右邊的本類物件的值複製給等號左邊的物件,它不屬於建構函式,等號左右兩邊的物件必須已經被建立,若沒有顯示的寫=運算子過載,則系統也會建立乙個預設的=運算子過載,只做一些基本的拷貝工作。

2.析構函式:

析構函式(destructor) 與建構函式相反,當物件結束其生命週期,如物件所在的函式已呼叫完畢時,系統自動執行析構函式。析構函式往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,delete會自動呼叫析構函式後釋放記憶體)。

手寫string類實現基本的建構函式和析構函式:

string.h

#include "pch.h"

#include

class string

;string .cpp

#include "pch.h"

#include "string.h"

#include

using namespace std;

string::string(const char *str)

else

}//拷貝建構函式要進行深賦拷貝操作;

string::string(const string & str)

//析構函式需要釋放空間,及長度歸零

string::~string()

c 建構函式與析構函式

一 建構函式 c 提供建構函式來處理物件的初始化,建構函式是一種特殊的成員函式,與其他的成員函式不同,不需要使用者來呼叫他,而是在建立物件時自動執行。它的特點是 函式名和類名相同,沒有返回值,可以過載 如果程式中未宣告,則系統自動產生出乙個預設的建構函式,預設的建構函式時不帶引數的。比如 stude...

C 建構函式與析構函式

c 規定,每個類必須有預設的建構函式,沒有建構函式就不能建立物件。若沒有提供任何建構函式,那麼c 提供自動提供乙個預設的建構函式,該預設建構函式是乙個沒有引數的建構函式,它僅僅負責建立物件而不做任何賦值操作。只要類中提供了任意乙個建構函式,那麼c 就不再自動提供預設建構函式。類物件的定義和變數的定義...

C 建構函式與析構函式

建構函式 對於c 的建構函式,暫且將其分為以下幾類 1.預設建構函式 2.隱士轉換建構函式 3.拷貝建構函式 4.其它建構函式 1.預設建構函式表示沒有任何引數的建構函式,當自定義任何建構函式以後,將不再自動建立預設建構函式,當然,預設建構函式啥也不幹,程式設計師關心係數頓時大跌。關於預設建構函式還...