建構函式詳解

2021-07-25 18:18:27 字數 1304 閱讀 9178

建構函式是類中的乙個特殊成員函式,它一般為公有的。在特殊的情況下它可能為私有的。此時這個類將會無法新建物件。當有乙個物件被新建時,建構函式會被自動的呼叫,這種機制能夠確保正確的初始化。在乙個空類中,建構函式是預設生成的。但如果我們寫了乙個建構函式之後,便不會再生成預設的建構函式。一般的,在建立物件的時候建構函式會被自動呼叫,在方法結束之後析構函式會被自動呼叫。但如果是new出來的物件就需要我們手動的去delete析構函式才會被呼叫。

假設定義了乙個classdemo的類。

class classdemo

;

classdemo

array

[10];

這種情況下面無參的建構函式會被呼叫十次

classdemo array[10] =;
此時有參的建構函式被呼叫一次,無參的建構函式被呼叫十次

classdemo *demo = static_cast

(molloc(sizeof(classdemo)));

free(demo);

此時既不會呼叫建構函式也不會呼叫析構函式,它只是單純的分配乙個空間。所以在c++中在堆區新建乙個物件應該使用new和delete。

classdemo demo =10;
此時的」=」並非乙個賦值語句,它會呼叫帶乙個引數的建構函式。基於這個特性,將帶乙個引數的建構函式叫為轉換建構函式。此時這句話等同於classdemo demo(10);

classdemo demo = 10;// 此時呼叫轉換建構函式

demo = 20; // 此時呼叫賦值函式

在demo = 20這句話中會做三件事情:1.通過建構函式新建乙個臨時的物件。2.將該臨時物件傳給預設的賦值函式。3.析構該臨時物件

預設的賦值函式就像預設的建構函式一樣,在乙個空類中是會預設生成的。它和預設建構函式不同的是我們寫了乙個建構函式之後預設的建構函式是不會生成的,而寫了賦值函式之後預設的賦值函式同樣會生成

classdemo& operator=(const classdemo &other)

這就是預設賦值函式的實現方式。

其實它的實質是將乙個int型的資料隱式轉換為classdemo型別,再將轉換後的型別傳遞給operator=()函式。如果沒有轉換建構函式這個隱式的轉換便無法執行。此時通過過載=運算子接收乙個int型資料即可。

如果想避免這種隱式的轉換,在轉換建構函式前面加上explicit關鍵字即可。

建構函式詳解

類的六個預設函式 一 建構函式的定義 一種特殊的成員函式,主要用於為物件分配空間,進行初始化。建構函式的任務是初始化類物件的資料成員,無論何時只要類的物件被建立,就會執行建構函式。eg 定義乙個date的建構函式 includeusing namespace std class date date ...

建構函式詳解

一 建構函式的原理 記住當使用new的時候,到底發生了什麼事情,在使用new操作符來呼叫乙個建構函式的時候,發生了什麼呢?其實很簡單,就發生了四件事 第一行,建立乙個空物件obj。第二行,將這個空物件的 proto 成員指向了建構函式物件的prototype成員物件,這是最關鍵的一步,具體細節將在下...

建構函式詳解

作用 構造方法用來初始化類的物件,與父類的其他成員不同,它不能被子類所繼承 子類可以繼承父類所有的public成員方法和變數,但不能繼承父類的構造方法 因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。如果沒有顯示的建構函式,編譯器會給乙個預設的建構函式,並且該...