C 類的建構函式詳解及例項

2022-10-04 01:30:15 字數 992 閱讀 5677

c++ 類的建構函式

預設建構函式

如果你定義乙個類,並且沒有給它定義建構函式。編譯器會為這個類提供預設的建構函式。如果你提供了建構函式,編譯器是不會再為你提供乙個預設建構函式的。編譯器提供的預設建構函式什麼程式設計客棧都沒做。類的成員變數將遵守預設的初始化規則。

編譯器提供的預設建構函式的初始化規則:

在棧和堆中的類物件的內建或復合型別成員變數將為髒資料;

在全域性變數區的類物件的內建或復合型別成員變數初始化為0;

類物件成員將呼叫預設的建構函式來初始化;

#include

using namespace std;

class box

; box box1;

int main()

; box::box(int x,int y):length(x),width(y)

如果你box box= 2來初始化乙個box物件。編譯器將2隱式轉換為乙個box物件,相當於呼叫了建構函式box(2)。

如果你在需要box型別引數的函式呼叫中傳入的是乙個int實參,將會構造乙個臨時的box物件再傳入函式作引數。函式結束後,這box物件也就消失了,這有什麼用呢?這幾乎肯定是乙個錯誤。對此我們可以:

1.用關鍵字explicit阻止建構函式定義的隱式轉換

在類建構函式的宣告前加上explicit關鍵字(注意不能在定義中加),可以阻止隱式轉換。

class box

;如果你再這樣定義乙個box物件:box bonvnkgldx = 2或者將int型別物件作為引數當做box物件傳給某個函式,將會引發編譯錯誤。

2.每次轉換,自己顯示的使用建構函式。這樣可以防止隱式轉換。

在需要box物件實參的的函式呼叫中用func(box(2))來呼叫類的建構函式建立乙個臨時物件,防止自動的隱式轉換。

建議:除非有明確的理由允許隱式轉換,可以用單個引數呼叫的建構函式都應該定義為explicit。

本文標題: c++ 類的建構函式詳解及例項

本文位址:

c 類建構函式詳解

複製 如下 一 建構函式是幹什麼的 類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m value 分配記憶體空間,並呼叫建構函式counter 自動地初始化物件,初始化之後c1的m va...

c 類的建構函式詳解

c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private 資料成員 int m value 該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式 由建構函式完成成員的初始化工作 eg counter c1 編譯系統為物件c1的每個資料成員 m value...

c 類的建構函式詳解

c 建構函式的知識在各種c 教材上已有介紹,不過初學者往往不太注意觀察和總結其中各種建構函式的特點和用法,故在此我根據自己的c 程式設計經驗總結了一下c 中各種建構函式的特點,並附上例子,希望對初學者有所幫助。c 類的建構函式詳解 一 建構函式是幹什麼的 class counter private ...