14.2.2节练习

istream &operator>>(istream &is, Sales_data &item)
{
    double price;//不需要初始,因为我们将先读入数据到price,之后才使用它
    is >> item.bookNo >> item.units_sold >> price;
    if(is)        //检测输入是否成功
        item.revenue = item.units_sold * price;
    else
        item = Sales_data();//输入失败;对象被赋予默认的状态
    return is;
}

上面的代码,检查了输入操作是否成功,输入操作在面临下面的情况时可能失败:1.当定义的数据类型装不下定义的数据类型时,比如

练习14.9:为你的Sales_data类定义运算符。

istream &operator>>(std::istream& is, Sales_data& item){
	double price = 0;
	is >> item.bookNo >> item.units_sold >> price;
	if (is)
		item.revenue = price * item.units_sold;
	else
		item = Sales_data();
	return is;
}

练习14.10:对于Sales_data的输入运算符来说如果给定下面的输入将会发生什么情况?

(a) 0-202-99999-9  10  24.95                                         (b)10  24.95   0-21-99999-9

答:(a)与定义数据类型匹配不会出现问题    (b)与数据类型不匹配会进入else

猜你喜欢

转载自blog.csdn.net/xnnswmzdszyd/article/details/94408551