构造函数继承问题c

时间:2013-12-01 14:16:58

标签: c++ inheritance constructor polymorphism abstract-class

如果我的基类的构造函数接受参数,我如何创建一个继承它的类,并使用派生类的构造函数执行基类的构造函数?

例如,假设我的基类的讲师采用了一个整数,并用它做了一个很酷的技巧,我怎么能这样做所以从它继承的所有类都可以做同样的

伪代码

baseClass instance(99); //does an awesome trick, nice
derivedClass instance(99); //<-- should do the same as above

正如我现在所做的那样,我已经定义了基类的构造函数,但是对于派生类,我将其构造函数留空,因为我希望它完全按照基本构造函数的作用完成,仅此而已。但是,这给了我一个错误:没有匹配函数调用'baseClass()',候选者是:baseClass(int),候选者期望1个参数,0提供

我是否必须将基类的构造函数设置为虚拟或其他什么?

2 个答案:

答案 0 :(得分:2)

这在当前的C ++标准中很容易,但它仍然需要您采取一些行动:

struct baseClass
{
  explicit baseClass(int);
};

struct derivedClass : baseClass
{
  using baseClass::baseClass;  // inherit *all* of baseClass' constructors
};

在上一个标准C ++ 03中,你必须在派生类型中实现构造函数,并在初始化列表中调用基类:

struct derivedClass : baseClass
{
  explicit derivedClass(int i) : baseClass(i) {}
};

注意:我在这里使用struct来保存输入:默认成员访问和继承是public

答案 1 :(得分:1)

这个想法是derivedClass无论如何都需要调用baseClass构造函数,因为它需要完成它的构造。您得到的错误是由于没有显式调用基本构造函数,编译器正在尝试调用默认值。

但是,在您的情况下,它不存在,因为您已经定义了一个带int的构造函数。要做你想做的事,一个解决方案可能是这样做:

class derivedClass : baseClass {
    public:
        derivedClass(int x) : baseClass(x) {}
};