zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    推荐系统入门笔记2--信息检索 Lucene
    Mybatis多个参数,其中有hashMap的写法
    Java中fastjson的toJSONString结果为空{}
    Linux中less命令出现ESC乱码
    关于博客
    【Uni-App】关于获取手机系统信息的项目实践
    mysql 服务列表找不到
    服务网格与Istio
    ARM架构服务器如何运行EasyNVR软件提示无法识别二进制文件排查及解决
    关于EasyNVR拉流摄像头的视频流存在视频流锁定机制的问题说明
  • 原文地址:https://www.cnblogs.com/sunyongjie1984/p/4279565.html
Copyright © 2011-2022 走看看