1 // add_item.cc
2 #include <iostream>
3 #include
"Sales_item.h"
4
5 int main(
int argc,
char**
argv)
6 {
7 Sales_item item1;
8 Sales_item item2;
9
10 std::cin >> item1 >> item2;
// read a pair of transactions
11 std::cout << item1 + item2 << std::endl;
// print their sum
12
13 return 0;
14 }
1 // Sales_item.h
2 /* This file defines the Sales_item class used in chapter 1.
3 * The code used in this file will be explained in
4 * Chapter 7 (Classes) and Chapter 14 (Overloaded Operators)
5 * Readers shouldn't try to understand the code in this file
6 * until they have read those chapters.
7 */
8
9 #ifndef SALESITEM_H
10 // we're here only if SALESITEM_H has not yet been defined
11 #define SALESITEM_H
12
13 // Definition of Sales_item class and related functions goes here
14 #include <iostream>
15 #include <
string>
16
17 class Sales_item {
18 // these declarations are explained section 7.2.1, p. 270
19 // and in chapter 14, pages 557, 558, 561
20 friend std::istream&
operator>>(std::istream&, Sales_item&
);
21 friend std::ostream&
operator<<(std::ostream&,
const Sales_item&
);
22 friend
bool operator<(
const Sales_item&,
const Sales_item&
);
23 friend
bool operator==(
const Sales_item&,
const Sales_item&
);
24 public:
25 // constructors are explained in section 7.1.4, pages 262 - 265
26 // default constructor needed to initialize members of built-in type
27 Sales_item() =
default;
28 Sales_item(
const std::
string &
book): bookNo(book) { }
29 Sales_item(std::istream &
is) {
is >> *
this; }
30 public:
31 // operations on Sales_item objects
32 // member binary operator: left-hand operand bound to implicit this pointer
33 Sales_item&
operator+=(
const Sales_item&
);
34
35 // operations on Sales_item objects
36 std::
string isbn()
const {
return bookNo; }
37 double avg_price()
const;
38 // private members as before
39 private:
40 std::
string bookNo;
// implicitly initialized to the empty string
41 unsigned units_sold =
0;
// explicitly initialized
42 double revenue =
0.0;
43 };
44
45 // used in chapter 10
46 inline
47 bool compareIsbn(
const Sales_item &lhs,
const Sales_item &
rhs)
48 {
return lhs.isbn() ==
rhs.isbn(); }
49 // nonmember binary operator: must declare a parameter for each operand
50 Sales_item
operator+(
const Sales_item&,
const Sales_item&
);
51
52 inline
bool operator==(
const Sales_item &lhs,
const Sales_item &
rhs)
53 {
54 // must be made a friend of Sales_item
55 return lhs.units_sold == rhs.units_sold &&
56 lhs.revenue == rhs.revenue &&
57 lhs.isbn() ==
rhs.isbn();
58 }
59
60 inline
bool operator!=(
const Sales_item &lhs,
const Sales_item &
rhs)
61 {
62 return !(lhs == rhs);
// != defined in terms of operator==
63 }
64
65 // assumes that both objects refer to the same ISBN
66 Sales_item& Sales_item::
operator+=(
const Sales_item&
rhs)
67 {
68 units_sold +=
rhs.units_sold;
69 revenue +=
rhs.revenue;
70 return *
this;
71 }
72
73 // assumes that both objects refer to the same ISBN
74 Sales_item
operator+(
const Sales_item& lhs,
const Sales_item&
rhs)
75 {
76 Sales_item ret(lhs);
// copy (|lhs|) into a local object that we'll return
77 ret += rhs;
// add in the contents of (|rhs|)
78 return ret;
// return (|ret|) by value
79 }
80
81 std::istream&
operator>>(std::istream&
in, Sales_item&
s)
82 {
83 double price;
84 in >> s.bookNo >> s.units_sold >>
price;
85 // check that the inputs succeeded
86 if (
in)
87 s.revenue = s.units_sold *
price;
88 else
89 s = Sales_item();
// input failed: reset object to default state
90 return in;
91 }
92
93 std::ostream&
operator<<(std::ostream&
out,
const Sales_item&
s)
94 {
95 out << s.isbn() <<
" " << s.units_sold <<
" "
96 << s.revenue <<
" " <<
s.avg_price();
97 return out;
98 }
99
100 double Sales_item::avg_price()
const
101 {
102 if (units_sold)
103 return revenue/
units_sold;
104 else
105 return 0;
106 }
107
108 #endif
1 AddItem: add_item.cc
2 >---g++ -g -Wall -std=c++0x add_item.cc -
o AddItem
3 clean:
4 >---rm AddItem
转载于:https://www.cnblogs.com/sunyongjie1984/p/4279565.html
相关资源:数据结构—成绩单生成器