【发布时间】:2013-02-13 10:42:15
【问题描述】:
我有以下情况(以下仅作说明):
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 添加额外的构造函数。
【问题讨论】:
-
第一个解决方案是正确的(使用三元运算符)。如果您有更复杂的初始化来计算 Base 参数的值,您可以使用(免费或不免费)函数调用 (
Derived::Derived(int _x, int _y, bool _z) : Base( compute_value() ) {}) -
class Base()错误,删除括号。您提出的第一个提案很好,将在调用Base()构造函数之前进行评估。 -
第二个,在
if的每个分支中,创建一个Base类型的临时对象并立即销毁它。
标签: c++ constructor