C++ Primer 第五版 中文版 练习 14.3 个人code



C++ Primer 第五版 中文版 练习 14.3

题目:为Sales_data 编写重载的输入、输出、加法和复合赋值运算符

答:

Sales_data.h

/*Sales_data.h定义Sales_data类 相关成员函数和相关成员数据。*/#include <iostream>#include <string>using std::ostream;using std::istream;using std::string;struct Sales_data{Sales_data() = default; // 默认构造函数Sales_data(const string &s) :bookNo(s) // 只为bookNo初始化,,其它成员让编译器赋默认值{}Sales_data(const string &s, unsigned n, double p) :bookNo(s), units_sold(n), revenue(p*n) // 全部成员都初始化{}Sales_data(istream &); //从 istram中读取一条信息进行初始化string isbn() const { return bookNo; } // 返回对象的ISNB编号Sales_data & combine(const Sales_data&); // 将一个Sales_data对象加到另一个对象上double avg_price() const; //售出书籍的平均价格string bookNo; // ISBN编号unsigned units_sold = 0; // 某本书的销量double revenue = 0.0; //总销售收入};Sales_data operator+(const Sales_data &, const Sales_data &);ostream &operator<<(ostream&, const Sales_data &);istream &operator>>(istream&, Sales_data &);

Sales_data.cpp

/*Sales_data.cpp定义Sales_data 成员函数*/#include "Sales_data.h"Sales_data::Sales_data(istream &is){is >> *this;}double Sales_data::avg_price() const{if (units_sold)return revenue / units_sold;elsereturn 0;}Sales_data& Sales_data::combine(const Sales_data &rhs){units_sold += rhs.units_sold;revenue += rhs.revenue;return *this;}Sales_data operator+(const Sales_data &lhs, const Sales_data &rhs){Sales_data sum = lhs;sum.combine(rhs);return sum;}ostream &operator<<(ostream &output, const Sales_data &item){output << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price();return output;}istream &operator>>(istream &input, Sales_data &item){double price = 0;input >> item.bookNo >> item.units_sold >> price;item.revenue = price*item.units_sold;return input;}

思念是对昨天悠长的沉淀和对未来美好的向往。

C++ Primer 第五版 中文版 练习 14.3 个人code

相关文章:

你感兴趣的文章:

标签云: