如果我的基类的构造函数接受参数,我如何创建一个继承它的类,并使用派生类的构造函数执行基类的构造函数?
例如,假设我的基类的讲师采用了一个整数,并用它做了一个很酷的技巧,我怎么能这样做所以从它继承的所有类都可以做同样的
伪代码
baseClass instance(99); //does an awesome trick, nice
derivedClass instance(99); //<-- should do the same as above
正如我现在所做的那样,我已经定义了基类的构造函数,但是对于派生类,我将其构造函数留空,因为我希望它完全按照基本构造函数的作用完成,仅此而已。但是,这给了我一个错误:没有匹配函数调用'baseClass()',候选者是:baseClass(int),候选者期望1个参数,0提供
我是否必须将基类的构造函数设置为虚拟或其他什么?
答案 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) {}
};