委托构造函数
c++11新标准,使我们可以定义所谓的委托构造函数(delegating constructor),一个委托构造函数使用它所属的其他构造函数执行它自己的初始化过程。
class Sales_data{
public:
//非委托构造函数使用对应的实参初始化成员
Sales_data(string s, unsigned cnt, double price):
bookNo(s), units_sold(cnt), revenue(cnt*prices) {}
Sales_data():Sales_data("",0,0.0) {}
Sales_data(string &s):Sales_data(s,0,0.0) {}
Sales_data(istream &is):Sales_data() {read(is, *this);}
};
转换构造函数
如果构造函数只接受一个实参,则它实际上定义了转换为此类类型的隐式转换机制,有时我们把这种构造函数称为转换构造函数(converting constructor)
Sales_data类中,接受string的构造函数和接受istream的构造函数分别定义了从这两种类型向Sales_data隐式转换的规则,也就是说在使用Sales_data的地方,我们可以使用string或者istream作为替代:
string null_book = "11111111";
//构建一个临时的Sales_data对象
item.combine(null_book);
只允许一步类类型转换
item.combine("11111111”); 、、错误
//正确:显示地转换成string
item.combine(string("11111"));