有没有办法强制派生类使用抽象基类的构造函数?它绝不是一个真正的构造者,我对创造性解决方案持开放态度。
class Abstract
{
private:
int Member;
string Text;
public:
Abstract(int Member, string Text)
{
this->Member = Member;
this->Text = Text;
}
// e.g. defining virtual functions
}
例如,我的抽象类有一些私有成员,每个派生类也应该有。它们应该在构造函数中定义,甚至违背派生类的意愿。
我知道构造函数不是继承的。但有没有一种解决方法可以产生类似的行为?
答案 0 :(得分:10)
正如其他用户所建议的那样,必须将基类构造函数调用到派生类构造函数的初始化列表中。
但是C ++ 11还有另一个很酷的解决方案:inherited constructors:
class Base
{
Base(int Member, string Text) { };
};
class Derived : public Base
{
using Base::Base; // <-- Brings to derived the Base's constructor.
};
但是你必须确保你的编译器可以使用C ++ 11的功能;当然,研究继承的构造函数是否符合您的要求而不是仅仅因为它酷而使用它。
答案 1 :(得分:7)
使用派生类'构造函数的初始化列表。
class Base
{
Base(int Member, string Text) { //...
}
};
class Derived : public Base
{
Derived(int Member, string Text) : Base(Member, Text) {
// ^^^^^^^^^^^^^^^^^^
// ...
}
};