1,explicit关键字
在类的构造函数中,当构造函数只有一个输入变量时,如果不加入explicit关键字,那么它实际上定义了转换为此类类型的隐式转换机制,例如下面的代码:
class Sales_data {
friend Sales_data add(const Sales_data&, const Sales_data&);
friend std::istream &read(std::istream&, Sales_data&);
friend std::ostream &print(std::ostream&, const Sales_data&);
public:
Sales_data() = default;
Sales_data(const std::string &s, unsigned n, double p):
bookNo(s), units_sold(n), revenue(p*n) { }
Sales_data(const std::string &s): bookNo(s) { }
Sales_data(std::istream&);
std::string isbn() const {return bookNo; }
Sales_data &combine(const Sales_data&);
private:
double avg_price() const
{return units_sold ? revenue/units_sold : 0; }
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
第三个构造函数只有接受一个string类型的输入,这个时候在需要使用Sales_data类的地方ÿ