zoukankan      html  css  js  c++  java
  • 第一章 开始

    1.20

    头文件:

      1 #ifndef SALESITEM_H  
      2 // we're here only if SALESITEM_H has not yet been defined  
      3 #define SALESITEM_H  
      4   
      5 // Definition of Sales_item class and related functions goes here  
      6 #include <iostream>  
      7 #include <string>  
      8   
      9 class Sales_item {  
     10 // these declarations are explained section 7.2.1, p. 270  
     11 // and in chapter 14, pages 557, 558, 561  
     12 friend std::istream& operator>>(std::istream&, Sales_item&);  
     13 friend std::ostream& operator<<(std::ostream&, const Sales_item&);  
     14 friend bool operator<(const Sales_item&, const Sales_item&);  
     15 friend bool  
     16 operator==(const Sales_item&, const Sales_item&);  
     17 public:  
     18     // constructors are explained in section 7.1.4, pages 262 - 265  
     19     // default constructor needed to initialize members of built-in type  
     20     Sales_item() = default;  
     21     Sales_item(const std::string &book): bookNo(book) { }  
     22     Sales_item(std::istream &is) { is >> *this; }  
     23 public:  
     24     // operations on Sales_item objects  
     25     // member binary operator: left-hand operand bound to implicit this pointer  
     26     Sales_item& operator+=(const Sales_item&);  
     27   
     28     // operations on Sales_item objects  
     29     std::string isbn() const { return bookNo; }  
     30     double avg_price() const;  
     31 // private members as before  
     32 private:  
     33     std::string bookNo;      // implicitly initialized to the empty string  
     34     unsigned units_sold;  // explicitly initialized  
     35     double revenue;  
     36 };  
     37   
     38 // used in chapter 10  
     39 inline  
     40 bool compareIsbn(const Sales_item &lhs, const Sales_item &rhs)  
     41 { return lhs.isbn() == rhs.isbn(); }  
     42   
     43 // nonmember binary operator: must declare a parameter for each operand  
     44 Sales_item operator+(const Sales_item&, const Sales_item&);  
     45   
     46 inline bool  
     47 operator==(const Sales_item &lhs, const Sales_item &rhs)  
     48 {  
     49     // must be made a friend of Sales_item  
     50     return lhs.units_sold == rhs.units_sold &&  
     51            lhs.revenue == rhs.revenue &&  
     52            lhs.isbn() == rhs.isbn();  
     53 }  
     54   
     55 inline bool  
     56 operator!=(const Sales_item &lhs, const Sales_item &rhs)  
     57 {  
     58     return !(lhs == rhs); // != defined in terms of operator==  
     59 }  
     60   
     61 // assumes that both objects refer to the same ISBN  
     62 Sales_item& Sales_item::operator+=(const Sales_item& rhs)  
     63 {  
     64     units_sold += rhs.units_sold;  
     65     revenue += rhs.revenue;  
     66     return *this;  
     67 }  
     68   
     69 // assumes that both objects refer to the same ISBN  
     70 Sales_item  
     71 operator+(const Sales_item& lhs, const Sales_item& rhs)  
     72 {  
     73     Sales_item ret(lhs);  // copy (|lhs|) into a local object that we'll return  
     74     ret += rhs;           // add in the contents of (|rhs|)  
     75     return ret;           // return (|ret|) by value  
     76 }  
     77   
     78 std::istream&  
     79 operator>>(std::istream& in, Sales_item& s)  
     80 {  
     81     double price;  
     82     in >> s.bookNo >> s.units_sold >> price;  
     83     // check that the inputs succeeded  
     84     if (in)  
     85         s.revenue = s.units_sold * price;  
     86     else  
     87         s = Sales_item();  // input failed: reset object to default state  
     88     return in;  
     89 }  
     90   
     91 std::ostream&  
     92 operator<<(std::ostream& out, const Sales_item& s)  
     93 {  
     94     out << s.isbn() << " " << s.units_sold << " "  
     95         << s.revenue << " " << s.avg_price();  
     96     return out;  
     97 }  
     98   
     99 double Sales_item::avg_price() const  
    100 {  
    101     if (units_sold)  
    102         return revenue/units_sold;  
    103     else  
    104         return 0;  
    105 }  
    106 #endif 
    Sales_item.h

    代码:

     1 #include <iostream>
     2 #include "Sales_item.h"
     3  
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     Sales_item book; 
     9     while (cin >> book) {
    10         cout << book << endl;
    11     }
    12     return 0;
    13 }
    View Code

    1.21

     1 #include <iostream>
     2 #include "Sales_item.h"
     3  
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     Sales_item book1, book2; 
     9     while (cin >> book1 >> book2) {
    10         if (book1.isbn() == book2.isbn())
    11             cout << book1 + book2 << endl;
    12         else cout << "两本书的ISBN必须相同!
    ";
    13     }
    14     return 0;
    15 }
    View Code

    1.22

     1 #include <iostream>
     2 #include "Sales_item.h"
     3  
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     Sales_item total, book;
     9     cin >> total;
    10     while (cin >> book) {
    11         if (total.isbn() != book.isbn())
    12             break;
    13         total += book;
    14     }
    15     cout << total << endl;
    16     return 0;
    17 }
    View Code

    1.23&1.24

     1 #include <iostream>
     2 #include "Sales_item.h"
     3  
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     Sales_item cur, book;
     9     int cnt = 1;
    10     cin >> cur;
    11     while (cin >> book) {
    12         if (book.isbn() == cur.isbn()) {
    13             cnt++;
    14         }
    15         else {
    16             cout << cur.isbn() << "" << cnt << "条销售记录。
    ";
    17             cnt = 1;
    18             cur = book; 
    19         }
    20     }
    21     return 0;
    22 }
    View Code

    注:要保证同一个ISBN号的输入是相连的。

  • 相关阅读:
    [N1CTF 2018]eating_cms 敏感文件扫描+php伪协议利用
    文件包含漏洞(总结)+常见的getshell+PHP伪协议
    laravel安装jwt-auth及验证(实例)
    理解 PHP 8 的 JIT
    Laravel 文件缓存也可以快得飞起,tmpfs 了解一下
    关于 Laravel ORM 对 Model::find 方法进行缓存
    在 Laravel 7 中优雅使用 UUID 教程
    PestPHP 正式开源,一个优雅的测试框架
    PHP 8 还有半年就要来了, 来看看有哪些新特性
    Redis持久化过程的监控及优化
  • 原文地址:https://www.cnblogs.com/xzxl/p/7666280.html
Copyright © 2011-2022 走看看