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