继承并重载默认构造函数
Inherit and overload default constructor
我一直在搜索这个,但我很惊讶没有找到任何东西。为什么我不能使用using
声明继承基类构造函数并在派生类中添加重载?我使用的是Visual C++2013,默认构造b
:时会忽略基类构造函数
error C2512: 'B' : no appropriate default constructor available
我已经通过重新定义构造函数来处理这个问题,但我不喜欢这样。这只是一个最小的例子,如果我只有一个基类构造函数,我就不会感到困扰。
struct A
{
A() : a(10) {}
int a;
};
struct B : A
{
using A::A;
explicit B(int a) { this->a = a; }
};
int main()
{
B b;
}
问题是默认构造函数没有继承。来自[class.inctor]/p3:
对于继承构造函数的候选集中的每个非模板构造函数[..],构造函数被隐式声明为具有相同的构造函数特性,除非在出现using声明的完整类中存在具有相同签名的用户声明构造函数,或者该构造函数将是默认的、副本,或者移动该类的构造函数。
您还有一个用户声明的构造函数,它禁止创建隐式默认构造函数。只需添加一个默认值即可使其工作:
B() = default;
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 初始化具有非默认构造函数的std::数组项的更好方法
- 具有默认模板类型的默认构造函数的类型推导
- 如何使用非默认构造函数实例化模板化类
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 声明没有默认构造函数的字段
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 没有默认构造函数作为模板参数的自定义比较器
- C++17 没有默认构造函数的地图放置(私有默认构造函数)
- 使用移动调用对等构造函数unique_ptr默认构造函数
- C++复制构造函数和默认构造函数
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- 构造函数默认公共和私有变量
- 类模板构造函数默认参数
- 构造函数默认参数
- C++模板构造函数默认参数
- 在c++中设置构造函数默认值
- c++构造函数默认参数
- C++构造函数默认值头文件