調用構造函數的這些部分的順序是什麼?構造函數組件調用的順序
myClass::myClass(otherClass c) // part 1
: baseClass(thing) // part 2
{ // part 3
thing = c;
}
是1,3,2?
調用構造函數的這些部分的順序是什麼?構造函數組件調用的順序
myClass::myClass(otherClass c) // part 1
: baseClass(thing) // part 2
{ // part 3
thing = c;
}
是1,3,2?
1,2,3。
評估第一個參數。然後初始化。然後是函數的主體。
參數的順序是未指定的。
ctor init list的順序是類體中成員的順序。
所以你說我的代碼會將未初始化的'Thing'對象傳遞給基類? – SirYakalot
@SirYakalot是的。 – Max
是在父類初始化之前調用的函數體?我的意思是,構造函數在繼承層次結構中是完全重疊的。 – SirYakalot
第1部分不會導致任何評估;它描述瞭如何調用 功能和名稱的參數(當然必須進行評估,以 通話功能。
初始化發生在進入構造函數體之前。首先 所有虛基類初始化,按照 深度從左到右的順序搜索繼承層次結構,然後所有 非虛擬基類被初始化,按從左到右的順序在 中出現在類定義中,最後成員是 按照它們在類定義中聲明的順序進行初始化 請注意,orde r其中初始值設定項出現在構造函數 中對訂單沒有影響。
最後,構造函數體(你的第3部分)被執行。
您是否嘗試過自己測試它?添加'println's到每個構造函數,並看看他們叫什麼順序:) –
@KshitijMehta我一直以爲'println'是一件Java事 – Flexo
不能相信我搞砸了!當我輸入這個密碼時,我正在用Java進行編程,而我只是在下意識地輸入了println!完全意味着'cout' –