本文主要是介绍C++ Primer 第4版中的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;elses = 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;elsereturn 0;
}
#endif
下面, 我们做一个简单的测试:
#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;elses = 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;elsereturn 0;
}int main()
{ Sales_item item1, item2; std::cin >> item1 >> item2; // read a pair of transactions std::cout << item1 + item2 << std::endl; // print their sum return 0;
}
输入 x 1 5 x 3 4 并按enter, 结果如下:
x 1 5 x 3 4
x 4 17 4.25
这篇关于C++ Primer 第4版中的Sales_item.h源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!