《C++ primer》第一章代码 Sales_item.h


  用C++写代码的总感觉还有许多地方没理解透,用起来很心虚,所以又找了一本《C++ Primer》来读,并记录下学习心得和体会,希望能与大家共勉。

  在第一章里需要用到一个叫Sales_item.h的头文件,但是打开书上所说的网址根本找不到,后来在度娘的帮助下找到了这份代码,故分享给大家。

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

  说实话,这份头文件可不简单,看起来有点费力,不过幸好还有点功力,代码还是能看懂。第一章就放这么复杂的代码,真是让人头疼。不过作者也许是想让读者先领略一下C++的风采和神奇特效,所以才构造一个复杂的类,有构造函数,有友元,有操作符重载,有内联函数,巴拉巴拉,这C++的一大块内容都给包含进去了。

  之前读了一会《C++沉思录》,对于类有了更深层次的理解,不过那本书似乎并不适合现在阅读,有些东西并不是现在能领悟得了的,还是等到时机成熟再来看会更好一点。毕竟书不在多,在于精嘛。

  考虑到部分人连简单的代码也懒得动手写,顺便把源文件代码也传上来。这是习题1.21的源码。我用的是第四版,其它版本也许有些差异,仅供参考。

 1 #include <iostream>
 2 #include "Sales_item.h"
 3 using namespace std;
 4 
 5 int main(int argc, char const *argv[])
 6 {
 7     Sales_item book;
 8     cout << "Enter transactions:" << endl;
 9     while(cin >> book){
10         cout << "ISBN          sold   price   revenue" << endl;
11         cout << book << endl;
12     }
13     return 0;
14 }

  之后会陆续放出阅读章节中感兴趣的代码,并附上自己的体会和建议,当然,如有差错,还希望大家及时斧正。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM