我有一个基类:
class Base {
protected:
int m_a;
virtual void foo() = 0;
}
和派生类
class Derived : public Base {
public:
Derived(int a);
}
基类是抽象的,因此只能创建派生类。
如何更好地实现派生的Ctor?
Derived::Derived(int a) : Base(a) {}
Base::Base(int a) : m_a(a) {}
要么
Derived::Derived(int a) { m_a = a;}
Base::Base(){}
是因为不能单独创建该成员,还是将其从Base构造函数中删除,还是将其保留在Base构造函数中以保留给他分配,是不是更好?
最佳答案
您的第一个解决方案-为基类提供显式构造函数-最好作为通用模式:
唯一的缺点:多输入一些内容-只要您不计算其他额外的内容“今天我有点懒,所以请不要忘记在所有派生类构造函数中初始化m_a”
如注释中所述,“签名宣布要求”足以使IMO成为默认模式,因此“另一种方式要求使m_a protected ”。