练习7.6
istream& read(istream& is, Sales_data& item) {
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return is;
}
ostream& print(ostream& os, const Sales_data& item) {
os << item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
return os;
}
Sales_data add(const Sales_data& lhs, const Sales_data& rhs)
{
Sales_data sum = lhs;
sum.combine(rhs);
return sum;
}
练习7.7
int main() {
Sales_data total;//保存下一条交易记录的变量
double price = 0.0;
//读入第一条交易记录,并确保有数据可以处理
if (read(cin,total))
{
Sales_data trans;
while (read(cin,trans)) {
//如果我们在处理相同的书
if (total.isbn() == trans.isbn()) {
total.combine(trans);
}
else {
//打印前一笔交易的次数
print(cout, total) << endl;
total = trans;
}
}
print(cout, total) << endl;
}
else {
//没有输入
cerr << "No data?" << endl;
return -1;
}
return 0;
}
练习7.8
read里面有修改实参,item对象的数据成员revenue为销售量乘以单价,因此不是常量,需要用普通的引用。
而print函数里面无需更改任何数据成员,因此可以是常量引用。
练习7.9
istream& read(istream& is, Person& p1) {
is >> p1.name >> p1.address;
return is;
}
ostream& print(ostream& os, Person& p1) {
os << p1.name << " "<<p1.address;
return os;
}
练习7.10
输入了第一条数据,之后又输入了第二条数据。则为真。
cin>>data1>>data2;
分步来说的话是:
cin>>data1;
cin>>data2;