C++ 继承构造函数和默认构造函数
我正在阅读有关的文档。有一个例子:C++ 继承构造函数和默认构造函数,c++,inheritance,constructor,default-constructor,C++,Inheritance,Constructor,Default Constructor,我正在阅读有关的文档。有一个例子: struct B1 { B1(int); }; struct D1 : B1 { using B1::B1; // The set of inherited constructors is // 1. B1(const B1&) // 2. B1(B1&&) // 3. B1(int) // D1 has the following constructors: // 1. D1() // 2. D1(const D1
struct B1 {
B1(int);
};
struct D1 : B1 {
using B1::B1;
// The set of inherited constructors is
// 1. B1(const B1&)
// 2. B1(B1&&)
// 3. B1(int)
// D1 has the following constructors:
// 1. D1()
// 2. D1(const D1&)
// 3. D1(D1&&)
// 4. D1(int) <- inherited
};
结构B1{
B1(内部);
};
结构D1:B1{
使用B1::B1;
//继承的构造函数集是
//1.B1(常数B1和)
//2.B1(B1和&)
//3.B1(内部)
//D1有以下施工人员:
//1.D1()
//2.D1(常数D1和)
//3.首被告(首被告及被告)
//4.D1(int)再往下一点,它说它没有默认构造函数
D1 e;//错误:D1没有默认构造函数请考虑以下代码:
struct B1
{
B1(int){}
};
struct D1 : B1 {
using B1::B1;
};
struct E
{
E(){}
};
struct F
{
F(int){}
};
如果你想写
E e;
它会建造得很好,但是
F f;
将失败。通过声明一个接受int
的ctor,您已经有效地删除了默认ctor
你的问题代码遵循同样的原则。一旦你将
B1
的ctor拉入D1
,你就有效地删除了它的默认ctor。@POTEMKINDX你忘了在main()中添加d1d;
)
。如果你这样做了,你会发现它不起作用:@POTEMKINDX你没有调用导致@POTEMKINDX更新的构造函数。顺便说一句,你没有创建实例。@nikitablack他们说的是D1()
存在于下一个代码块中的下一个代码块中D1 e;//错误:D1没有默认构造函数
@KerrekSB问题是cppreference上的第一个示例说它在该示例中应该有默认值。因此页面上有矛盾的信息,但这并不能解释为什么D1
h在这种情况下没有默认构造函数。是的,如果你看到这篇文章中的例子,我认为这可能会误导你,因为有另一个构造函数,那么D()就没有声明。