2

我有以下情况(以下仅用于说明):

class Base() 
{
public:
    Base(int);
};

class Derived : public Base 
{
public:
    Derived(int, int, bool);
};

我想根据派生构造函数中的布尔标志初始化基类。什么(如果有的话)是这样做的正确方法..

我可以做(但评估是在初始化 Base 之前完成的吗?):

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.

4

3 回答 3

3
 Derived::Derived(int _x, int _y, bool _z) : Base(_z?_x:_y) {}

是正确的方法。您只能调用带有参数的基本构造函数member initializers list

于 2013-02-13T10:44:24.120 回答
2

您的第一个选择是正确的:使用初始化列表。

第二种选择不起作用。

于 2013-02-13T10:44:09.820 回答
2

第一个替代方案是您唯一可行的替代方案。派生类的构造函数将在基类的构造函数之后调用,因此您的第二个选项无效。

现在,当然,问题是这是否是“正确”的事情。因为您可能应该有两个派生类,而不是一个。我并不是说您所做的事情本身就是错误的,这只是要记住的事情。

于 2013-02-13T10:47:30.980 回答