一个类也可以有两个默认构造函数
So can a class have two default constructors?
我正在读我的书,它说"为其所有参数提供默认参数的构造函数也定义了默认构造函数"
所以在下面的代码中:
class Book {
public:
int pages = 25;
double price = 10.0;
std::string font = "Times New Roman";
Book() {}
Book(int n, double p, std::string f): pages(n), price(p), font(f) { }
};
不带参数的构造函数和为其参数提供默认参数的构造函数都是默认构造函数?或者默认参数是否意味着第二个构造函数需要看起来像这样:Book(): pages(5), price(46), font("Times New Roman") {}
有趣的是
,您的类可以有多个构造函数重载,这些重载可以在没有参数的情况下工作,因此是有效的默认构造函数:
struct A
{
A() {}
A( int i = 0 ) {}
};
这是完全合法的。因此,标题中问题的答案是:是的。唯一的问题是你不能使用它们——它们是模棱两可的。当你写:
A a;
您会收到一个错误,因为两者都会匹配。
如果可以在不显式调用构造函数*的情况下构造对象,则具有默认构造函数。类具有默认构造函数:
-
如果不创建任何构造函数。(
= default
) -
如果创建没有任何参数的构造函数。
-
如果创建一个构造函数,其所有参数都具有默认值。
* 要清除语句,您必须能够制作如下对象:
Book book;
为其所有参数提供默认参数的构造函数还定义了默认构造函数
这意味着使用默认参数。在您的示例中,这意味着:
Book( int n = 5, double p = 46, std::string f = "Times New Roman" ) :
pages( n ),
price( p ),
font( f ) {}
你正在研究构造函数的类型。所以有三个,编译器的默认构造函数,程序员的默认构造函数,带有默认参数,程序员的默认构造函数没有 dafault 参数。所以你说的是第二种类型。是的,它是一种默认构造
相关文章:
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 当我链接两个静态C++库时,我可以在两个主函数库中有两个主要功能吗?
- 静态类属性,C++中的多个构造函数
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- pair的两个构造函数几乎相同,为什么不生成构建错误?
- 为什么<T> LLVM 中的预期为 Expect&&... 实现两个构造函数<T>?
- 为什么我的类只适用于两个构造函数 C++
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 类介绍 (c++) 项目希望我们创建两个构造函数,但它们都不需要任何参数 - 我应该在这里做什么?
- 除了两个构造函数外,C++库导入也可以工作
- 在两个构造函数之前将我的静态数据成员在 CPP 文件中初始化为 0
- 如何有条件地在具有相同签名的两个构造函数之间切换
- RAII 在两个构造函数之间进行选择的方式
- 具有两个构造函数的抽象类
- 这两个构造函数调用之间的区别
- 为什么在我的程序中调用两个构造函数
- 组合复制和移动的两个构造函数
- 为什么这两个构造函数一起不会产生歧义错误?
- 在两个构造函数之间进行选择