CPPP5_1.5.1AddingSales_items

 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

c84fa50c-7316-48e0-bfe2-105ac7ad1db4

IMG_1368IMG_1369IMG_1370IMG_1371IMG_1372IMG_1373IMG_1374IMG_1375IMG_1385IMG_1389IMG_1390IMG_1391IMG_1392IMG_1394

IMG_1395

IMG_1426

IMG_1435IMG_1436IMG_1437

IMG_1438

原文地址:https://www.cnblogs.com/sunyongjie1984/p/4279565.html