如何在派生类上具有默认行为,而不是重新定义构造函数
How to have default behaviour on a derived class instead of redefining constructor
我注意到我在继承层次结构中重复了很多代码,我想知道是否没有更好的方法。我有一个项目类,许多其他类型的项目可以继承:
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
。
相关文章:
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 当类成员参数具有相同的名称时,如何定义构造函数?
- C++定义构造函数使对象成为非 POD
- 请描述一下在 c++ 中在此类中定义构造函数的方式?
- 在 C++ 中返回新的构造函数(*this)工厂
- 不为 emplace() 定义构造函数的解决方法
- 已定义构造函数的构造函数无法识别
- 在自定义构造函数中的堆上创建指针
- c++ 17 中结构自动定义构造函数的规则是什么?
- Python 错误:在 SWIG 生成的C++模板化代码模块中没有定义构造函数
- unique_ptr看不到派生类的自定义构造函数
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 为什么一个非平凡的成员需要为同一类中的匿名联合定义构造函数
- 为其成员根据模板基类存在的类定义构造函数
- 如何在派生类上具有默认行为,而不是重新定义构造函数
- 在结构中定义构造函数
- 将从基类继承的构造函数与自定义构造函数混合使用
- 如何在模板类外部定义构造函数
- C 需要使用自定义构造函数的帮助
- 可以联合包含具有用户定义构造函数的类的对象