我有以下的情況(以下僅用於說明):基類構造
class Base()
{
public:
Base(int);
};
class Derived : public Base
{
public:
Derived(int, int, bool);
};
我想初始化取決於布爾標誌在派生構造的基類。什麼(如果有的話)是這樣做的正確的方式..
我可以做(但基地做過評估被初始化):
Derived::Derived(int _x, int _y, bool _z) : Base(_z?_x:_y) {}
或(但這可能無法正常工作正確)
Derived::Derived(int _x, int _y, bool _z)
{
if(_z)
::Base(_x);
else
::Base(_y);
}
如果這樣做,那麼我可能與添加額外的構造函數來Derived
脫身的不正確的方法。
第一個解決方案是正確的(使用三元運算符)。如果你有一個更復雜的初始化來計算Base參數的值,你可以使用一個(free或not)函數調用('Derived :: Derived(int _x,int _y,bool _z):Base(compute_value()) {}') – utnapistim 2013-02-13 10:44:19
'class Base()'是錯誤的,請移除parens。你提出的第一個提議是好的,評估將在調用'Base()'構造函數之前完成。 – 2013-02-13 10:47:14
第二個,在'if'的每個分支中,創建一個'Base'類型的臨時對象並立即銷燬它。 – 2013-02-13 13:33:53