2011-12-08 88 views
-3

調用構造函數的這些部分的順序是什麼?構造函數組件調用的順序

myClass::myClass(otherClass c) // part 1 
: baseClass(thing)   // part 2 
{        // part 3 
    thing = c; 
} 

是1,3,2?

+3

您是否嘗試過自己測試它?添加'println's到每個構造函數,並看看他們叫什麼順序:) –

+1

@KshitijMehta我一直以爲'println'是一件Java事 – Flexo

+0

不能相信我搞砸了!當我輸入這個密碼時,我正在用Java進行編程,而我只是在下意識地輸入了println!完全意味着'cout' –

回答

1

1,2,3。

評估第一個參數。然後初始化。然後是函數的主體。


參數的順序是未指定的。

ctor init list的順序是類體中成員的順序。

+0

所以你說我的代碼會將未初始化的'Thing'對象傳遞給基類? – SirYakalot

+0

@SirYakalot是的。 – Max

+0

是在父類初始化之前調用的函數體?我的意思是,構造函數在繼承層次結構中是完全重疊的。 – SirYakalot

1

第1部分不會導致任何評估;它描述瞭如何調用 功能和名稱的參數(當然必須進行評估,以 通話功能。

初始化發生在進入構造函數體之前。首先 所有虛基類初始化,按照 深度從左到右的順序搜索繼承層次結構,然後所有 非虛擬基類被初始化,按從左到右的順序在 中出現在類定義中,最後成員是 按照它們在類定義中聲明的順序進行初始化 請注意,orde r其中初始值設定項出現在構造函數 中對訂單沒有影響。

最後,構造函數體(你的第3部分)被執行。