练习14.9:
输入运算符从给定输入流读取对应类型的对象,存入Sales_data的数据成员中。与输出不同,输入通常要进行一些正确性的判定,并进行相应处理。
class Sales_data
{friend istream&operator>>(istream&is,Sales_data &item);
};istream&operator>>(istream&is,Sales_data &item)
{double price;if >>item.bookNo>>item.units_sold>>price;if (is){item.revenue = item.units_sold*price;}else {item = Sales_data();}return is;
}
练习14.10:
(a)参数中传入的Sales_data对象将会得到输入的值,其中bookNo、units_sold、price的值分别是:0-201-99999-9、10、24.95,同时revenue的值是249.5。
(b)输入错误,参数中传入的Sales_data对象将会得到默认值。
练习14.11:
【出题思路】
理解输入运算符通常要判断输入数据的正确性。
【解答】
这个实现没有判断输入数据的正确性,是错误的。
(a)如果输入的是0-201-99999-9 10 24.95,程序将会正常执行,Sales_data对象得到正确的值。
(b)如果输入的是10 24.95 0-210-99999-9,bookNo、units_sold、price将会得到错误的值,分别是:10,24,0.95,而revenue的值是:24 * 0.95 =22.8。这显然跟我们的预期结果是不一样的。
练习14.12:
#include <iostream>
using namespace std;class Date
{public:Date(){}Date(int y,int m,int d):year(y),month(m),day(d){}friend istream&operator>>(istream &is,Date&dt);private:int year,month,day;
};istream&operator>>(istream&is,Date&dt)
{is >>dt.year>>dt.month>>dt.day;if (!is){dt = Date(0,0,0);}return is;
}