=============以下内容是原始问题=================
我有一个关于示例&的问题在C ++ Primer 5th,P.292的解释,它是关于如何使用委托构造函数:
class Sales_data {
public:
//target constructor
Sales_data(std::string s, unsigned cnt, double price) :
bookNo(s), units_sold(cnt), revenue(cnt * price) { }
//delegate constructor that I have question on
Sales_data(std::istream &is): Sales_data() {read(is, *this)}
};
用于解释此委托构造函数的工作原理,该书说:
它委托给默认构造函数,而构造函数又委托给三参数构造函数。
我对这个解释感到困惑。我不明白为什么委托构造函数首先委托默认构造函数,然后仍然需要委托目标构造函数。
为了确认我的想法,我做了一些实验:
首先,我想到目标构造函数会自动生成一个默认构造函数,因为示例代码中没有默认的构造函数声明;我知道当我有自定义构造函数时,默认构造函数是必须的。所以我试着用一些简单的测试代码编译类:
int main(int argc, char const *argv[]) {
Sale_data item1(std::cin);
print(std::cout, item1);
return 0;
}
我收到了一个错误:
error: no matching function for call to Sale_data::Sale_data()
然后我添加了Sales_data() = default
,程序打印出正确的结果。
接下来,我删除了我的目标构造函数。但是,该程序仍然表示与我从步骤2得到的结果相同:看起来默认构造函数完成了它的工作。
与本书所解释的内容相比,我的实验表明,在我的情况下,目标构造函数与委托构造函数没有任何关系。你能指出我错在哪里吗?
先谢谢你的帮助!
答案 0 :(得分:0)
首先,我想到目标构造函数会自动生成 生成默认构造函数,因为没有默认值 示例代码中的构造函数声明;
书中有一个默认构造函数。就在三个参数目标consturctor之后。您是否引用了错误的代码示例?
Sales_data(): Sales_data("", 0, 0) {}