c++ primer第五版 练习7.7
练习7.7: 使用这些新函数重写7.1.2节练习中的交易处理程序
//Sales.data.h #ifndef SALES_DATA_H #define SALES_DATA_H #include <iostream> #include <string> struct Sales_data { std::string isbn() const{return bookNO;} double avg_price() const; Sales_data& combine(const Sales_data&); unsigned units_sold=0; std::string bookNO; double revenue=0.0; double price=0.0; }; double Sales_data::avg_price() const { if(units_sold) return revenue/units_sold; else return 0; } Sales_data& Sales_data::combine(const Sales_data &rhs) { units_sold+=rhs.units_sold; revenue+=rhs.revenue; return *this; } std::istream& read(std::istream &is,Sales_data &item) { is>>item.bookNO>>item.units_sold>>item.price; item.revenue=item.units_sold*item.price; return is; } std::ostream& print(std::ostream &os,const Sales_data &item) { os<<item.isbn()<<" "<<item.units_sold<<" "<<item.revenue<<" "<<item.avg_price(); return os; } Sales_data add(const Sales_data &lhs,const Sales_data &rhs) { Sales_data sum=lhs; sum.combine(rhs); return sum; } #endif // SALES_DATA_H
//main.cpp #include "Sales_data.h" int main(int argc,const char **argv) { Sales_data total; if(read(std::cin,total)) { Sales_data trans; while(read(std::cin,trans)) { if(total.isbn()==trans.isbn()) { total=add(total,trans); } else { print(std::cout,total)<<std::endl; total=trans; } } print(std::cout,total); } else { std::cerr<<"No data?"<<std::endl; } }
本文出自 “奔跑的驴” 博客,请务必保留此出处http://amgodchan.blog.51cto.com/9521586/1568244
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。