首页 > 代码库 > C++primer 7.1.4节练习

C++primer 7.1.4节练习

练习7.11、练习7.13、练习7.14

 1 #include <iostream>
 2 #include <string>
 3 #include "factmain.h"
 4 using namespace std;
 5 
 6 struct Sales_data {
 7     string  isbn() const { return bookNo; }
 8     Sales_data &combine(const Sales_data&);
 9     string bookNo;
10     unsigned units_sold;
11     double price = 0.0;
12     double revenue = 0.0;
13     Sales_data() = default;
14     Sales_data(const string &s, const unsigned &u, const double &p) : bookNo(s), units_sold(u), price(p) {};
15     Sales_data(const string &s, const unsigned &u) : bookNo(s), units_sold(u) {};
16     Sales_data(istream &is);
17 };
18 
19 Sales_data add(const Sales_data &lhs, const Sales_data &rhs);
20 ostream &print(ostream &os, const Sales_data &item);
21 istream &read(istream &is, Sales_data &item);
22 
23 
24 int main()
25 {
26     Sales_data test1("hello",56);
27     print(cout, test1);
28     Sales_data item1(cin);
29     Sales_data item2;
30     double totalRevenue = 0;
31     double totalSold = 0;
32     int counter = 1;
33     if ((item1.bookNo).empty())
34     {
35         item1.revenue = item1.price * item1.units_sold;
36         while (read(cin,item2)) {
37             item2.revenue = item2.price * item2.units_sold;
38             if (item1.bookNo == item2.bookNo) {
39                 item1.combine(item2);
40                 ++counter;
41             }
42             else {
43                 print(cout, item1) << endl;
44                 item1.bookNo = item2.bookNo;
45                 item1.units_sold = item2.units_sold;
46                 item1.revenue = item2.revenue;
47                 counter = 1;
48             }
49         }
50         print(cout, item2) << endl;
51     }
52     system("pause");
53     return 0;
54 }
55 
56 Sales_data add(const Sales_data & lhs, const Sales_data & rhs) //非成员函数add
57 {
58     Sales_data sum = lhs;
59     sum.combine(rhs);
60     return sum;
61     // TODO: 在此处插入 return 语句
62 }
63 
64 istream & read(istream & is, Sales_data & item)
65 {
66     is >> item.bookNo >> item.units_sold >> item.price;
67     item.revenue = item.units_sold * item.price;
68     return is;
69     // TODO: 在此处插入 return 语句
70 }
71 
72 ostream & print(ostream & os, const Sales_data & item)
73 {
74     os << item.bookNo << " " << item.units_sold << " " << item.price << " " << item.revenue;
75     return os;
76     // TODO: 在此处插入 return 语句
77 }
78 
79 Sales_data & Sales_data::combine(const Sales_data &rhs)
80 {
81     units_sold += rhs.units_sold;
82     revenue += rhs.revenue;
83     return *this;
84 }
85 
86 Sales_data::Sales_data(istream & is)
87 {
88     read(is, *this);
89 }

 

练习7.12

需要用到友元函数,待解决

练习7.15

见最后程序

 

C++primer 7.1.4节练习