#include <iostream> #include <string> #include <cassert> #include <algorithm> #include < Vector>using namespace Std;class sales_data{friend std::istream& operator>> (std::istream&, Sales_ data&); Friend std::ostream& operator<< (std::ostream&, const sales_data&); Friend Sales_data operator+ (const sales_data&,const sales_data&);//non-member function (symmetry) friend bool operator== (const SAL Es_data&,const sales_data&); friend bool operator!= (const sales_data&,const sales_data&); Public:sales_data (): Units_sold (0), Revenue (0.0) {} sales_data (const std::string &s): Bookno (s), Units_sold (0), Revenue (0.0) {} sales_data (const std::string &s,unsigned n,double P): Bookno (s), Units_sold (n), Revenue (N*p) {} Sales _data (Std::istream &is); sales_data& operator+= (const sales_data&);//member function (compound assignment is generally a member function) std::string ISBN () const{return Bookno;} sales_data& operator= (const std::string & s);p rivate:inline double Avg_price () const;//inlineprivate:std::string bookno; ISBN unsigned units_sold;//sales double revenue; Total Price};inline double sales_data::avg_price () const{return units_sold? revenue/units_sold:0;} Sales_data::sales_data (Std::istream &is) {is>>*this;} std::istream& operator>> (std::istream& is,sales_data& Item) {double price=0.0; is>>item.bookno>>item.units_sold>>price; if (IS)//detection flow status, input error-prone and rewrite object data item.revenue=item.units_sold*price; else Item=sales_data (); return is;} std::ostream& operator<< (std::ostream& OS, const sales_data& Item) {OS<<ITEM.ISBN () << " "<<item.units_sold<<" "<<item.revenue<<" "<<item.avg_price (); return OS;} Sales_data operator+ (const sales_data& item1,const sales_data& item2) {sales_data s (item1); s+=item2;//Call compound assignment return s;} sales_data& sales_data::operator+=(const sales_data& RHS) {units_sold+=rhs.units_sold; Revenue+=rhs.revenue; return *this;} BOOL operator== (const sales_data& lhs,const sales_data& RHS) {return lhs.bookno==rhs.bookno && l Hs.units_sold==rhs.units_sold && lhs.revenue==rhs.revenue;} BOOL Operator!= (const sales_data& lhs,const sales_data& RHS) {return! LHS==RHS);} sales_data& sales_data::operator= (const std::string &s) {*this=sales_data (s); return *this;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
C++primer Bookstore Program