c 建構函式詳解

2021-10-05 09:53:40 字數 1439 閱讀 7832

如果建立乙個類你沒有寫任何建構函式,則系統會自動生成預設的無參建構函式,函式為空,什麼都不做

只要你寫了乙個某一種建構函式,系統就不會再自動生成這樣乙個預設的建構函式

建構函式可以有各種引數形式,乙個類可以有多個建構函式,前提是引數的個數,型別,順序不同

拷貝建構函式的參數列為物件本身的引用,用於根據乙個已存在的物件複製出乙個新的該類的物件

若沒有顯示的寫複製建構函式,則系統會預設建立乙個複製建構函式,但當類中有指標成員時,由系統預設建立該複製建構函式會存在風險(屬於淺拷貝)

類的物件需要拷貝時,拷貝建構函式將會被呼叫

(1)乙個物件以值傳遞的方式傳入函式體 

(2)乙個物件以值傳遞的方式從函式返回 

(3)乙個物件需要通過另外乙個物件進行初始化。

淺拷貝與深拷貝

子類不會繼承父類的構造方法

子類建立物件時,先執行父類無參的構造方法,然後執行子類的構造方法,如果父類只有有引數的構造方法,則子類必須顯示呼叫此帶參構造方法

子類呼叫父類構造方法,其實只是一種函式呼叫,服務的還是子類的物件

繼承建構函式不會繼承引數的預設值

//(1)透傳繼承

struct a

a(double d,int i){}

a(float f,int i,const char* c){}

//...等等系列的建構函式版本號

};struct b:a

b(double d,int i):a(d,i){}

b(folat f,int i,const char* c):a(f,i,e){} //a(f,i,e)是實參

//......等等好多個和基類建構函式相應的建構函式

};//栗子

son(string name, char ***, int age, int height, int tall) :parent(name, ***, age)

//(2)使用using

struct a

a(double d,int i){}

a(float f,int i,const char* c){}

//...等等系列的建構函式版本號

};struct b:a

;//當使用using語句繼承基類建構函式時。派生類無法對類自身定義的新的類成員進行初始化,我們可使用類成員

的初始化表示式,為派生類成員設定乙個預設初始值

//(3)解決重複定義

struct a

};struct b

};struct c:a,b

父類建構函式,僅僅只是為了方便子類物件屬性的初始化//

};//a 和b 的建構函式會導致c 中重複定義相同型別的繼承建構函式。

解決方法是讓繼承類進行顯示定義建構函式。

C 建構函式詳解

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

c 建構函式詳解

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

C 建構函式詳解

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