使用附加变量

时间:2017-05-12 01:25:22

标签: c++ c++11

我们说我有一个基类 -

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

这是一个我正在研究的更复杂的事情的一个被剥夺的例子。

1 个答案:

答案 0 :(得分:0)

这两个选项实际上都能正常运行。在C ++中,派生类的对象包含其基类的对象作为单独的对象,以允许多重继承。您在创建派生对象之前初始化它们是正确的。我使用g ++分别使用两个构造函数编译代码,并且都正确编译。我认为您的错误可能是由于其他原因造成的。