那么一个类可以有两个默认构造函数吗?

Fro*_*raw -1 c++

我正在读我的书,它说“为其所有参数提供默认参数的构造函数也定义了默认构造函数”

所以在下面的代码中:

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) { }
};
Run Code Online (Sandbox Code Playgroud)

不带参数的构造函数和为其参数提供默认参数的构造函数都是默认构造函数吗?或者默认参数是否意味着第二个构造函数需要类似于:Book():pages(5),price(46),font("Times New Roman"){}

Dan*_*rey 5

有趣的是,你的类可以有多个构造函数重载,它们可以在没有参数的情况下工作,因此是有效的默认构造函数:

struct A
{
    A() {}
    A( int i = 0 ) {}
};
Run Code Online (Sandbox Code Playgroud)

这样写是完全合法的。因此,标题问题的答案是:是的。唯一的问题是你不能使用它们——它们是不明确的。当你写:

A a;
Run Code Online (Sandbox Code Playgroud)

你会得到一个错误,因为两者都会匹配。