zoukankan      html  css  js  c++  java
  • Sales_item.h

    下列是《C++primer》书中介绍和使用的Sales_item.h类

    经测试可以使用,现在贴在这里,分享给大家!


    版本一:

    #ifndef SALESITEM_H
    #define SALESITEM_H
    #include <iostream>
    #include <string>

    class Sales_item
    {
    public:
    Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
    Sales_item(std::istream &is){ is >> *this;}
    friend std::istream& operator>>(std::istream &,Sales_item &);
    friend std::ostream& operator<<(std::ostream &,const Sales_item &);
    public:
    Sales_item & operator+=(const Sales_item&);
    public:
    double avg_price() const;
    bool same_isbn(const Sales_item &rhs)const
    {
    return isbn == rhs.isbn;
    }
    Sales_item():units_sold(0),revenue(0.0){}
    public:
    std::string isbn;
    unsigned units_sold;
    double revenue;
    };

    using std::istream;
    using std::ostream;
    Sales_item operator+(const Sales_item &,const Sales_item &);
    inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)
    {
    return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
    }
    inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)
    {
    return !(lhs == rhs);
    }

    inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)
    {
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
    }
    inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)
    {
    Sales_item ret(lhs);
    ret += rhs;
    return ret;
    }
    inline istream& operator>>(istream &in,Sales_item &s)
    {
    double price;
    in >> s.isbn >> s.units_sold >> price;
    if(in)
    s.revenue = s.units_sold * price;
    else
    s = Sales_item();
    return in;
    }
    inline ostream& operator<<(ostream &out,const Sales_item &s)
    {
    out << s.isbn << "t" <<s.units_sold << "t" << s.revenue << "t" << s.avg_price();
    return out;
    }
    inline double Sales_item::avg_price() const
    {
    if(units_sold)
    return revenue/units_sold;
    else
    return 0;
    }
    #endif

    1. #ifndef SALESITEM_H  
    2. #define SALESITEM_H  
    3. #include <iostream>  
    4. #include <string>  
    5.    
    6.    
    7. class Sales_item  
    8. {  
    9. public:  
    10.     Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}  
    11.     Sales_item(std::istream &is){ is >> *this;}  
    12.     friend std::istream& operator>>(std::istream &,Sales_item &);  
    13.     friend std::ostream& operator<<(std::ostream &,const Sales_item &);  
    14. public:  
    15.     Sales_item & operator+=(const Sales_item&);  
    16. public:  
    17.     double avg_price() const;  
    18. bool same_isbn(const Sales_item &rhs)const  
    19. {  
    20.     return isbn == rhs.isbn;  
    21. }  
    22. Sales_item():units_sold(0),revenue(0.0){}  
    23. public:  
    24.     std::string isbn;  
    25.     unsigned units_sold;  
    26.     double revenue;  
    27. };  
    28.    
    29. using std::istream;  
    30. using std::ostream;  
    31. Sales_item operator+(const Sales_item &,const Sales_item &);  
    32. inline bool operator==(const Sales_item &lhs,const Sales_item &rhs)  
    33. {  
    34.     return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);  
    35. }  
    36. inline bool operator!=(const Sales_item &lhs,const Sales_item &rhs)  
    37. {  
    38.     return !(lhs == rhs);  
    39. }  
    40.    
    41. inline Sales_item & Sales_item::operator +=(const Sales_item &rhs)  
    42. {  
    43.     units_sold += rhs.units_sold;  
    44.     revenue += rhs.revenue;  
    45.     return *this;  
    46. }  
    47. inline Sales_item operator+(const Sales_item &lhs,const Sales_item &rhs)  
    48. {  
    49.     Sales_item ret(lhs);  
    50.     ret += rhs;  
    51.     return ret;  
    52. }  
    53. inline istream& operator>>(istream &in,Sales_item &s)  
    54. {  
    55.     double price;  
    56.     in >> s.isbn >> s.units_sold >> price;  
    57.     if(in)  
    58.          s.revenue = s.units_sold * price;  
    59.     else  
    60.     s = Sales_item();  
    61.     return in;  
    62. }  
    63. inline ostream& operator<<(ostream &out,const Sales_item &s)  
    64. {  
    65.     out << s.isbn << "t" <<s.units_sold << "t" << s.revenue << "t" << s.avg_price();  
    66.     return out;  
    67. }  
    68. inline double Sales_item::avg_price() const  
    69. {  
    70.     if(units_sold)  
    71.         return revenue/units_sold;  
    72.     else  
    73.     return 0;  
    74. }  
    75. #endif  
    版本二:

    #ifndef SALES_ITEM_H_
    #define SALES_ITEM_H_

    #include <iostream>
    #include <String>

    /// Start class
    class Sales_item
    {
    public:
    Sales_item():units_sold(0),revenue(0.0){}
    Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}
    Sales_item(std::istream & in){in >> *this;}
    virtual ~Sales_item(){}
    double avg_price() const;
    bool same_isbn(const Sales_item &)const;

    Sales_item & operator+=(const Sales_item &);
    friend std::istream & operator>>(std::istream &,Sales_item &);
    friend std::ostream & operator<<(std::ostream &,const Sales_item &);

    // 二元运算符重载的成员函数只能有一个参数,所以不能放此处

    // Sales_item operator+(const Sales_item &,const Sales_item &);
    // bool operator==(const Sales_item &,const Sales_item &);
    // bool operator!=(const Sales_item &,const Sales_item &);

    std::string isbn;
    unsigned units_sold;
    double revenue;
    };
    /// End class

    Sales_item operator+(const Sales_item &,const Sales_item &);

    /// Class function
    inline Sales_item & Sales_item::operator+=(const Sales_item & rhs)
    {
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
    }
    inline Sales_item operator+(const Sales_item & lhs,const Sales_item & rhs)
    {
    Sales_item ret(lhs);
    ret += rhs;
    return ret;
    }
    inline bool operator==(const Sales_item & lhs,const Sales_item & rhs)
    {
    return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
    }
    inline bool operator!=(const Sales_item & lhs,const Sales_item & rhs)
    {
    return !(lhs == rhs);
    }
    inline std::istream & operator>>(std::istream &in,Sales_item &s)
    {
    double price;
    in >> s.isbn >> s.units_sold >>price;
    if(in)
    s.revenue = s.units_sold * price;
    else
    s = Sales_item();
    return in;
    }
    inline std::ostream & operator<<(std::ostream &out,const Sales_item &s)
    {
    out << s.isbn << " " << s.units_sold << " " << s.revenue << " " << s.avg_price();
    return out;
    }
    inline double Sales_item::avg_price() const
    {
    if(units_sold)
    return revenue/units_sold;
    else
    return 0;
    }
    inline bool Sales_item::same_isbn(const Sales_item &rhs)const
    {
    return isbn == rhs.isbn;
    }
    /// End class function
    #endif


  • 相关阅读:
    Node.js 常用工具 util
    jQuery 选择器
    Node.js 创建HTTP服务器
    Node.js GET/POST请求
    JavaScript 用法
    Node.js 事件
    Node.js 函数
    Bootstrap<基础二> 网格系统
    读文章《Flexbox详解》笔记
    好文要读
  • 原文地址:https://www.cnblogs.com/herbertchina/p/4306825.html
Copyright © 2011-2022 走看看