即使派生类没有成员变量,我是否需要重新实现基类的所有构造函数?

RDG*_*ida 4 c++ inheritance constructor

我们假设我有一个基类

class Base
{
public:
    Base();
    Base(int i, double j);
    Base(int i, double j, char ch);

    virtual void print();

private:
    int m;
    double l;
    char n;
};
Run Code Online (Sandbox Code Playgroud)

我想派生一个覆盖print函数的类,但除此之外与基类完全相同.

class Derived : public Base
{
public:
    void print();
};
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在派生类上使用基类的所有构造函数,而无需为Derived类重写所有这些构造函数?

Jar*_*d42 10

从C++ 11开始,您可以使用using:

class Derived : public Base
{
public:
    using Base::Base; // use all constructors of base.

    void print() override;
};
Run Code Online (Sandbox Code Playgroud)

现场演示

  • @SebastianRedl:我们现在已经到了2015年的中途.这意味着,虽然有充分的理由认为人们不能使用C++ 11或更新版本,但必须在问题中明确说明,不得假设. (3认同)
  • @LightnessRacesinOrbit我不是故意批评答案; 事实上我赞成了它.但仍需要指出,因为微软最新的稳定版本Visual Studio 2013不支持继承的构造函数.(VS 2015确实.) (2认同)