• 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

  • 相关阅读:
    Git 基础笔记整理1
    学习开源中国客户端
    IOS项目中的细节处理,如更改状态栏等等
    网络编程
    当FileWriter没有flush的时候,不写入文件
    批量移动文件
    批量重命名文件
    替换一个文件内的某个字符
    遍历map和删除map中的一个entry
    ArrayList的遍历-转载
  • 原文地址:https://www.cnblogs.com/sunyongjie1984/p/4279565.html
Copyright © 2020-2023  润新知