2012-06-18 55 views

回答

1

首先調用類構造函數,初始化器列表可用於參數化構造函數調用,否則它們的缺省構造函數將用於類構造函數入口點。

Class() : otherClass_("fred", 42) { 
//ctor body 
} 

將小號構造函數體 '的Class前S(OtherClass(char *name, int age),說)構造函數' 調用OtherClass。否則,將使用默認的構造函數(無參數)。但是,由於成員在身體中可用,所以他們在身體進入之前就已經建成了。上面的例子是一個初始化器列表,並且是Class的構造函數顯式調用成員構造函數的機會,否則這些成員構造函數將解析爲當時默認的構造函數調用。

成員構造的順序是它們在類聲明中出現的次序(聲明)。如果這不同於您在初始化程序列表中調用構造函數的順序,則編譯器應該警告您。

1

您不會顯示構造函數的代碼,但假設它很平凡,那麼在Testing()內構建的唯一東西是OtherClass。如果test自動存儲

其他成員變量將不被初始化,或者將靜態intialized如果靜態存儲。這意味着如果test自動倉儲,他們的成員x et.al.將具有不確定的值,就像它們被聲明爲函數變量時一樣。

1

首先,基類子對象按照它們聲明的順序被初始化(儘管你的類沒有這些)。

然後按照它們聲明的順序初始化成員。如果它們出現在構造函數的初始化列表中,那麼它們將按照指定的初始化進行初始化;否則它們將被默認初始化。對於您的成員intbool成員以及POD類型,這意味着它們將保持未初始化狀態(如果對象具有靜態存儲持續時間,則爲零初始化),除非它們位於初始化程序列表中。

最後,執行構造函數體。如果它正常返回,那麼該對象將被完全構建。

相關問題