基类构造函数

时间:2013-02-13 10:42:16

标签: c++ constructor

我有以下情况(以下仅供参考):

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

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

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

我可以做(但是在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添加额外的构造函数。

3 个答案:

答案 0 :(得分:3)

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

是正确的方法。 您只能使用member initializers list

中的参数调用基础构造函数

答案 1 :(得分:2)

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

第二种选择不起作用。

答案 2 :(得分:2)

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

现在,当然,问题在于这是否是“正确”的事情。因为你可能应该有两个派生类,而不是一个。我不是说你在做什么是错的,这只是要记住的事情。