1、建構函式的定義:每個類都分別定義了它的物件被初始化的方式,類通過乙個或幾個特殊的成員函式來控制其物件的初始化過程,這些函式叫做建構函式。
2、建構函式的任務:初始化類物件的資料成員,無論何時只要類的物件被建立,就會執行建構函式。
3、建構函式的名字和類名相同。而且建構函式沒有返回型別;建構函式也有乙個(可能為空)引數列表和乙個(可能為空的)函式體。類可以包含多個建構函式,不同的建構函式之間必須在引數數量或引數型別上有所區別。不同於其他的成員函式,建構函式不能被宣告成const的。當我們建立類的乙個const物件時,直到建構函式完成初始化過程,物件才能真正獲得其「常量」屬性。因此,建構函式在const物件的構造過程中可以向其寫值。
4、合成的預設建構函式:
類通過乙個特殊的建構函式來控制預設初始化過程,這個函式就叫做預設建構函式。預設建構函式無需任何實參。預設建構函式在很多方面都有其特殊性,其中之一就是,如果我們的類沒有顯示地定義建構函式,那麼編譯器就會為我們隱式地定義乙個預設建構函式。
編譯器建立的建構函式又被稱為合成的預設建構函式。對於大多數類來說,這個合成的預設建構函式將按照如下的規則初始化類的資料成員:
(1)如果存在類內的初始值,用它來初始化成員;
(2)否則,預設初始化該成員。
5、某些類不能依賴於合成的預設建構函式
合成的預設建構函式只適合非常簡單的類。對於乙個普通的類來說,必須定義它自己的預設建構函式,原因有三:第乙個原因也是最容易理解的乙個原因,就是編譯器只有在發現類不包含任何建構函式的情況下才會替我們去生成乙個預設的建構函式。一旦我們定義了一些其他的建構函式,那麼除非我們再定義乙個預設的建構函式,否則類將沒有預設的建構函式。這條規則的依據是,如果乙個類在某種情況下需要控制物件的初始化,那麼有可能該類在所有情況下都需要控制。
第二個原因是對於某些類來說,合成的預設建構函式可能執行錯誤的操作。如果類包含有內建型別或者復合型別的成員,則只有當這些成員全部被賦予了類內初始值時,這個類才適合於使用合成的預設建構函式。
第三個原因是有的時候編譯器不能為某些類合成預設的建構函式。
建構函式 拷貝建構函式 賦值建構函式
class和struct很大乙個區別在於,c除了成員的訪問控制許可權,struct中的成員預設是public,而class中的field預設是private class還有乙個special的地方是它有建構函式 constructor。建構函式是class中的一員,和成員變數 其他成員函式一起構成乙...
構造函式呼叫建構函式
題目如下 問下列 的列印結果為0嗎?include stdlib.h include iostream using namespace std struct clscls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,...
建構函式 拷貝建構函式
建構函式可以分為三類 1 不帶引數的建構函式 在函式體中對資料成員賦初值,這種方式使該類的每乙個物件都得到同一組初值 2 帶引數的建構函式 如果使用者希望對不同的物件賦不同的初值,可以採用帶引數的建構函式。在呼叫不同物件的建構函式時從外面將不同的資料傳遞給建構函式,以實現初始化 3 複製建構函式 建...