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;
	else
		return 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;
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值