我有以下的情况(以下仅用于说明):基类构造
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