我们说我有一个基类 -
class Base {
public:
Base(int n) : num(n) {}
private:
int num;
};
如何使派生类构造函数调用基础构造函数,同时初始化自己的附加变量?假设我只能修改Derived而不是Base(比如Base是一些我不想改变的库)
class Derived : public Base {
public:
// This won't work, compiler will complain no viable constructor or so
Derived(int n, int an) : Base(n), another_num(an) {};
// This won't work either
Derived(int n, int an) : Base(n) {another_num = an;}
private:
int another_num;
};
EDIT 我得到的错误信息:
no matching constructor for initialization of Derived
candidate constructor not viable: requires 2 arguments, but 1 was provided
这是一个我正在研究的更复杂的事情的一个被剥夺的例子。
答案 0 :(得分:0)
这两个选项实际上都能正常运行。在C ++中,派生类的对象包含其基类的对象作为单独的对象,以允许多重继承。您在创建派生对象之前初始化它们是正确的。我使用g ++分别使用两个构造函数编译代码,并且都正确编译。我认为您的错误可能是由于其他原因造成的。