c++ primer 第七章习题

练习7.5 应该,不需要写操作。

练习7.6 7.7

#include <iostream>
#include <string>
#include "Sales_data.h" 


using namespace std;

ostream& print(ostream& os, const Sales_data& item) {
	os << item.isbn() << " " << item.units_sold << " " << item.price;
	return os;
}

istream& read(istream& is, Sales_data& item) {
	is >> item.bookNo >> item.units_sold >> item.price;
	return is;
}

Sales_data add(const Sales_data& a, const Sales_data& b) {
	Sales_data sum = a;
	sum.combine(b);
	return sum;
}

int main() 
{
	Sales_data total;

	if (read(cin,total)) {
		Sales_data trans;
		while (read(cin,trans)) {
			if (total.isbn() == trans.isbn())
				total.combine(trans);
			else {
				print(cout, total);
				cout << endl;
				total = trans;
			}
		}
		print(cout, total);
		cout << endl;
	}
	else {
		cerr << "No data?!" << endl;
	}
	return 0;
}

 

#ifndef SALES_DATA_H
#define SALES_DATA_H

#include<string>
#include<iostream>

struct Sales_data {
	std::string bookNo;
	unsigned units_sold = 0;
	double price = 0.0;
	Sales_data& combine (const Sales_data& sa);
	std::string isbn()const { return bookNo; }
};

Sales_data& Sales_data::combine(const Sales_data& sa) {
	units_sold += sa.units_sold;
	price = (price * units_sold + sa.price * sa.units_sold) / (units_sold + sa.units_sold);
	return *this;
}

std::istr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值