您的位置:首页 > 编程语言 > C语言/C++

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

2014-08-13 23:24 127 查看

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对象的值输出到ostream
istream &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;
else
return 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;
}


执行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: