基类构造函数
Base class constructor
我有以下情况(以下仅用于说明):
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
添加额外的构造函数。
Derived::Derived(int _x, int _y, bool _z) : Base(_z?_x:_y) {}
是正确的方式。您只能在member initializers list
中使用参数调用基本构造函数
您的第一个选择是正确的:使用初始化列表。
第二种选择不起作用。
第一个备选方案是唯一可行的备选方案。派生类的构造函数将在基类的构造函数之后调用,因此您的第二个选项无效。
当然,现在的问题是这样做是否"正确"。因为可能你应该有两个派生类,而不是一个。我并不是说你所做的是错误的,这只是需要记住的。
相关文章:
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 参数包构造函数在类模板中隐藏用户定义的转换
- 具有已删除移动和复制构造函数的类的就地构造
- 创建一个没有复制构造函数的类的 std::vector 的 std::vector
- C++构造函数和类?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 如何在其他类中使用参数化构造函数制作类的对象?
- 具有值包装器的可变参数模板构造函数的类构造函数优先级
- 如何使用私有构造函数对类进行单元测试?
- C++虚拟函数:基类函数是调用的,而不是派生的
- c++17在编译时将带有已删除复制构造函数的类添加到std::vector
- 从作为模板参数传递给构造函数的类继承,或者从它们继承
- 继承的构造函数忽略类内初始化
- 模板和隐式构造函数的类定义之外的友元声明
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 为什么具有私有构造函数的类不阻止从此类继承?如何控制哪些类可以从某个基继承?
- 具有多个非默认构造函数基的Singleton派生类
- 调用基默认构造函数模板类
- 当基类未指定构造函数时,如何使用仅具有带参数的构造函数的类派生基类?
- 构造所有基类不需要默认生成的构造函数