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

见最后程序

时间: 2024-10-24 22:57:37

C++primer 7.1.4节练习的相关文章

C++primer 15.7.3节练习

练习15.26 写的时候不小心写到了派生类Disc_quote,其实是一样的,主要明白原理即可 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(

C++primer 15.2.2节练习

练习15.4 a)错误,一个类不能派生它本身 b)正确,Derived从他的基类Base派生,且规定派生类从基类继承的数据成员对于派生类的用户是不可见. c)错误,派生类的声明与其他类相差不大,声明中包含类名但是不包含他的派生列表: 练习15.5 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector>

C++primer 14.2.1节练习

练习14.6 1 #include <iostream> 2 #include <string> 3 #include <memory> 4 #include <vector> 5 #include <algorithm> 6 #include <numeric> 7 8 using namespace std; 9 10 class Sales_data { 11 friend istream& operator >&

C++primer 15.7.4节练习

练习15.27 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(""), price(0.0) { cout <<

C++ Primer 6.5.3节练习

练习 6.47: 改写6.3.2节(第205页)练习中使用递归输出vector内容的程序,使其有条件地输出与执行过程有关的信息.例如,每次调用时输出vector对象的大小.分别在打开和关闭调试器的情况下编译并执行这个程序. ///这一题需要在前面输出vector内容的程序中,添加新的功能---->有条件地输出与执行过程有关的信息. 为了简便解答该题,我们采用vector引用,vector的类型是string型,在过程中不改变容器大小. 经过测试得到一个现象,编译器将会按照 #define DEB

C++primer 11.3.5节练习

练习11.27 对于multimap来说统计关键字出现的次数用count会很好,而对于map来说寻找关键字来说更加妥当: 练习11.28 1 #include <iostream> 2 #include <string> 3 #include <set> 4 #include <map> 5 #include <algorithm> 6 #include <vector> 7 #include <algorithm> 8

C++primer 11.2.3节练习

练习11.12 1 #include<iostream> 2 #include<string> 3 #include <iostream> 4 #include <vector> 5 #include <algorithm> 6 #include <list> 7 #include <functional> 8 #include <iterator> 9 #include <map> 10 #inc

C++primer 7.5.3节练习

练习7.43 网上的答案 1 #include <iostream> 2 using std::cout; 3 using std::endl; 4 5 class Nodefault 6 { 7 public: 8 Nodefault(int i) 9 { 10 val = i; 11 } 12 int val; 13 }; 14 15 class C 16 { 17 public: 18 Nodefault nd; 19 C(int i = 0) : nd(i) { } 20 }; 21

C++primer 7.1.3节练习

练习7.6 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 uns

c++ primer 6.5.1节练习答案

练习6.40 a)正确 b)错误,一旦某个形参被赋予了默认值,他后面的所有形参都必须有默认值. 练习6.41 a)错误,ht没有默认实参,而a的实参列表里也没有给出实参: b)合法,调用init(24 ,10 ,' '): c)虽然合法,但是与程序猿的设计初衷不符,*会转换成十进制的数43,相当于调用init(14, 43, ' '): 练习6.42 1 string make_plural(size_t ctr, const string &word, const string &end