C++ primer(第五版) 练习 7.11 个人 code

来源:互联网 发布:java中的引用 编辑:程序博客网 时间:2024/06/05 11:31


C++ primer(第五版) 练习 7.11

题目:在你的Sales_data 类中添加构造函数,然后编写一段程序令其用到每个构造函数。

答:

/*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 add(const Sales_data&, const Sales_data&); //执行两个Sales_data对象的加法ostream &print(ostream&, const Sales_data&);  //将 Sales_data对象的值输出到ostreamistream &read(istream&, Sales_data&); //将数据从 istream 读入到 Sales_data 对象中


/*Sales_data.cpp定义Sales_data 成员函数*/#include "Sales_data.h"Sales_data::Sales_data(istream &is){read(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;}ostream &print(ostream &output, const Sales_data &item){output << item.isbn() << " " << item.units_sold << " " << item.revenue << " " << item.avg_price();return output;}istream &read(istream &input, Sales_data &item){double price = 0;input >> item.bookNo >> item.units_sold >> price;item.revenue = price*item.units_sold;return input;}Sales_data add(const Sales_data &lhs, const Sales_data &rhs){Sales_data sum = lhs;sum.combine(rhs);return sum;}


#include <iostream>#include "Sales_data.h"using std::cout;using std::cin;using std::endl;int main(){Sales_data mySales1, mySales2("0-201-78345-X"), mySales3("0-201-78345-X", 10, 23.5);print(cout, mySales1);cout << endl;print(cout, mySales2);cout << endl;print(cout, mySales3);cout << endl;return 0;}


执行结果:



0 0
原创粉丝点击