《C++ Primer》7.1.3节练习

练习7.6:

#include <iostream>
using namespace std;

Sales_data add(const Sales_data &lhs,const Sales_data &rhs)
{
	Sales_data sum = lhs;
	sum.combine(rhs);
	return sum;
}

std::istream &read(std::istream &is ,Sales_data &item)
{
	is>>item.bookNo>>item.units_sold>>item.sellingprice>>item.saleprice;
	return is;
}

std::ostream &print(std::ostream &os,const Sales_data &item)
{
	os<<item.isbn()<<" "<<item.units_sold<<" "<<item.sellingprice<<" "<<item.saleprice
	<<" "<<item.discount;
	return os;
}

练习7.7:

#include <iostream>
#include "Sales_data.h"
using namespace std;

int main()
{
	cout<<"请输入交易记录(ISBN,销售额,原价,实际售价):"<<endl;
	Sales_data total;
	if (read(cin,total))
	{
		Sales_data trans;
		while(read(cin,trans))
		{
			if (total.isbn()==trans.isbn())
				total = add(total,trans);
			else
			{
				print(cout,total);
				cout<<endl;
				total = trans;
			}
		}
		print(cout,total);
		cout<<endl;
	}
	else
	{
		cerr<<"No data?!"<<endl;
		return -1;
	}
	return 0;
}

练习7.8:
read函数将其Sales_data参数定义成普通的引用是因为我们需要从标准输入流中读取数据并将其写入到给定的Sales_data对象,因此需要有修改对象的权限。而print将其参数定义成常量引用是因为它只负责数据的输出,不对其做任何更改。

练习7.9:

#include <iostream>
#include <string>
using std::string;

class Person {
	private:
		string strName;
		string strAddress;
	public:
		string getName()const {
			return strName;
		}
		string getAddress() const {
			return strAddress;
		}
		std::istream &read(std::istream&is,Person &per)
		{
			is>>per.strName>>per.strAddress;
			return is;
		}
		std::ostream &print(std::ostream &os,const Person &per)
		{
			os<<per.getName()<<per.getAddress();
			return os;
		}
};

练习7.10:
【出题思路】
read函数的返回类型是std::istream &,体会这里使用引用的作用。
【解答】
因为read函数的返回类型是引用,所以read(cin, data1)的返回值可以继续作为外层read函数的实参使用。该条件检验读入data1和data2的过程是否正确,如果正确,条件满足;否则条件不满足。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值