c 建構函式

2021-09-26 13:52:20 字數 1596 閱讀 7151

建構函式

建構函式的名字和類名相同,乙個類中可以定義多個建構函式.不同的建構函式 之間 是過載關係.

如果乙個類沒有定義建構函式,則系統會自動給該類定義乙個建構函式 稱為 預設建構函式.

而一旦 乙個類中 有建構函式,則不會再給這個類 定義預設的建構函式.

建構函式 可以定義在類內,也可以定義在類外. 若定義在類外,則要加作用域運算子,表明這個建構函式 是屬於那個類.

如果乙個類定義了建構函式,但是還想有預設的建構函式 可以用 default

cstu()

=default

;

乙個建構函式的執行相當於 乙個賦值的過程,而不是初始化的過程.

然而,對部分資料型別不能進行賦值,只能進行初始化, 如const,引用.

這就引出了初始化列表.

初始化列表 (類的乙個屬性)

每乙個建構函式都有乙個 與之繫結的初始化列表. 預設為 空

作用: 對類中成員進行初始化;

和建構函式的區別 : 建構函式是賦值,初始化列表 是進行初始化.

與建構函式執行的順序 : 初始化列表 比 建構函式先執行.

初始化的順序 : 誰先定義給誰先初始化,於初始化列表的順序無關.(最好令建構函式初始值的順序於成員宣告的順序保持一致,而且如果可能的話,盡量避免使用某些成員初始化其他成員).

初始化列表 在 建構函式後,以冒號隔開.多個初始化成員以逗號隔開

例:

class cstu

};

還可以通過引數進行初始化

class cstu

};

const 和 引用,或者屬於某種未提供預設建構函式的類型別的初始化

錯誤操作

#include

using namespace std;

class cstu

*/cstu

(int c,

int d)

void

display()

};intmain()

正確操作

#include

using namespace std;

class cstu

/* cstu(int c,int d)

*/void

display()

};intmain()

注意:

建構函式不能被宣告為 const,當我們建立乙個const 物件時,直到建構函式完成初始化過程,這個物件才能獲取 常量屬性

還有乙個特殊的型別: 靜態常量整型資料成員可以在類中初始化.

儘管 乙個類會有多個物件,但這個 資料成員是 對多有 物件共享的.

綜上: 建議使用建構函式初始值.在很多類中,初始化和賦值的區別事關底層效率問題.前者直接初始化資料成員,後者先初始化在賦值.

除了效率問題,還有 一些資料成員必須被初始化.

C 建構函式 拷貝建構函式

建構函式 class base private int m var 建構函式無返回值型別,函式名和型別相同。拷貝建構函式傳遞引數為引用。1 class base2 7 拷貝建構函式 8 base base ref m var ref m var 9 11 private 12 intm var 13...

C 構造器(建構函式)

定義和作用 構造器是在構建類的 引用時 自動執行的方法。所以,每個類都必須至少要有乙個構造器。在訪問乙個類的時候,編譯器最先執行構造器中的 它與類同名,帶引數的構造器能夠獲取引數,但是與方法不同的是 構造器雖然也是一種 例項型別 即必須通過例項來進行呼叫,也可以稱之為引用型別 但是卻不能返回任何值 ...

C 建構函式

建構函式是一種特殊的成員函式,它主要用於為物件分配儲存空間,對資料成員進行初始化.1 建構函式的名字必須與類同名 2 建構函式沒有返回型別,它可以帶引數,也可以不帶引數 3 建構函式的主要作用是完成對類的初始化工作 4 在建立乙個類的新物件 使用new關鍵字 時,系統回自動呼叫給類的建構函式初始化新...