#include <string>
#include <iostream>
class Sales_data {
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
public:
std::string const& isbn() const { return bookNo; };
Sales_data& combine(const Sales_data&);
};
// member functions.
Sales_data& Sales_data::combine(const Sales_data& rhs)
{
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
// nonmember functions
std::istream &read(std::istream &is, Sales_data &item)
{
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return is;
}
std::ostream &print(std::ostream &os, const Sales_data &item)
{
os << item.isbn() << " " << item.units_sold << " " << item.revenue;
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;
if (read(std::cin, total))
{
Sales_data trans;
while (read(std::cin, trans)) {
if (total.isbn() == trans.isbn())
total.combine(trans);
else {
print(std::cout, total) << std::endl;
total = trans;
}
}
print(std::cout, total) << std::endl;
}
else
{
std::cerr << "No data?!" << std::endl;
return -1;
}
return 0;
}
7.8
read函数会改变参数
而print 一定不能改变参数值
7.9
#include <string>
#include <iostream>
class Person
{
std::string name;
std::string address;
public:
std::string const& getName() const { return name; }
std::string const& getAddress() const {return address; }
};
std::istream &read(std::istream &is, Person &person)
{
return is >> person.name >> person.address;
}
std::ostream &print(std::ostream &os, const Person &person)
{
return os << person.name << " " << person.address;
}
7.10
因为read函数 返回的是 一个std::istream & ,所以这部分的意思是
讲输入的依次存入date1 和date2