如何在派生类上具有默认行为,而不是重新定义构造函数

How to have default behaviour on a derived class instead of redefining constructor

本文关键字:新定义 构造函数 定义 派生 默认      更新时间:2023-10-16

我注意到我在继承层次结构中重复了很多代码,我想知道是否没有更好的方法。我有一个项目类,许多其他类型的项目可以继承:

struct Item{ 
    Item(){};
    Item(string name) : name(name){}
    string name;
};

因此,这是一个可以创建没有名称(默认值)或提供的名称的类。一切都很好。但是说我有一个从项目继承的课程:

struct Book : Item
{
};

我不能这样做:

Book harryPotter("Harry Potter");

如果我想要相同类型的行为,我可以选择是否提供字符串,我必须执行以下操作:

struct Book : Item
{
    Book(string name) : Item(name) {}   // Set the name in base's initialiser list
    // Or...
    Book(string name) { this->name = name; }  // Set the name in derived's constructor
};

在这两种情况下,我都必须编写一个单独的默认构造函数,因为编译器不会在我自己制作自己的类型的地方提供一个编译器。

,据我所知,每当我创建一个新项目类型时,都必须重新测试。

,我已经意识到这个问题即使我不想要默认的构造函数也会发生,如果我想创建一种类型的项目,我必须明确为每个项目创建构造函数吗?

编辑:感谢Sam Varshavchik为此,从C 11开始,您可以用:

继承构造函数
using Base::Base;
struct Book : Item
{
    using Item::Item;
};

这将基本上将Item的所有构造函数继承到Book