我有以下情况(以下仅供参考):
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
添加额外的构造函数。
答案 0 :(得分:3)
Derived::Derived(int _x, int _y, bool _z) : Base(_z?_x:_y) {}
是正确的方法。
您只能使用member initializers list
答案 1 :(得分:2)
您的第一个选择是正确的:使用初始化列表。
第二种选择不起作用。
答案 2 :(得分:2)
第一种选择是唯一可行的替代方案。派生类的构造函数将在基类的构造函数之后调用,因此您的第二个选项无效。
现在,当然,问题在于这是否是“正确”的事情。因为你可能应该有两个派生类,而不是一个。我不是说你在做什么是错的,这只是要记住的事情。