练习14.9
为你的Sales_data类定义输入运算符。
解答:
参考书中输入运算符的实现。
练习14.10
对于Sales_data的输入运算符来说如果给定了下面的输入将发生什么情况?
(a) 0-201-99999-9 10 24.95
(b) 10 24.95 0-210-99999-9
解答:
(a)这个属于正常输入,其得到结果也是符合预期的。
bookNo为 0-201-99999-9
units_sold为10
price 为24.95
(b)输入的顺序改变了,会使成员变量得到的值与标准不一致,也就是不符合我们的预期
bookNo为10
units_sold为24 (units_sold的类型是size_t)
price 为 0.95 (之前int类型无法读取‘.’字符,所以只读取了第一个数字,剩下的内容就由price读取了)
练习14.11
下面的Sales_data输入运算符存在错误吗?如果有,请指出来。对于这个运算符如果仍然给定上个练习的输入将会发生什么情况?
istream &operator>>(istream &is, Sales_data &item)
{
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return is;
}
这里没有对失败的情况进行处理的过程。
第二问还是和上题一样。
练习14.12
你在7.5.1节练习7.40(第240页)中曾经选择并编写了一个类,为它定义一个输入运算符并确保该元素安抚可以处理输入错误。
解答:
又是这题…… 略吧,呼。