仅仅记录贴,按书上的做完了一边,想把private分离出来已经很难了。因为is用到的成员变量都是直接当做public使用的,如果要改的话可以考虑存储输入,让后用构造函数对类进行初始化。
#includeusing namespace std;class Sales_data{public: string bookNo; unsigned unit_sold; double revenue; string isbn()const {return this->bookNo; } double avg_price()const; Sales_data &combine(const Sales_data&); Sales_data(istream &is); //友元函数 friend Sales_data add(const Sales_data& ls,const Sales_data& rs);}; Sales_data add(const Sales_data& ls,const Sales_data& rs){ Sales_data sum = ls; sum.combine(rs); return sum;}//返回的值是对ostream的引用 ostream &print(ostream& os,const Sales_data &item){ os< < < < < < >item.bookNo >>item.unit_sold >>price; item.revenue = price * item.unit_sold; return is;}double Sales_data::avg_price()const{ if(revenue)return revenue/unit_sold; else return 0;}Sales_data& Sales_data::combine(const Sales_data& rhs){// this->revenue = this->revenue + rhs.revenue; this->revenue += rhs.revenue; this->unit_sold += rhs.unit_sold; return *this;} //外部定义构造函数Sales_data::Sales_data(istream &is) { read(is,*this); } int main(){ return 0;}