练习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的过程是否正确,如果正确,条件满足;否则条件不满足。

《C++ Primer》7.1.3节练习相关推荐

  1. C++primer 9.2.1节练习

    练习9.3 迭代器begin和end必须指向相同的容器,end可以与begin指向相同的位置,但不能指向begin之前的位置: 练习9.4 1 #include <iostream> 2 ...

  2. C++primer 10.2.1节练习

    练习10.3 1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include <s ...

  3. C++primer 13.1.6节练习

    练习13.18 1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using na ...

  4. 《C++ Primer》10.1节练习

    练习10.1: #include <iostream> #include <vector> #include <algorithm> using namespace ...

  5. 《C++ Primer》14.4节练习(部分)

    练习14.20: class Sales_data {friend Sales_data operator+(const Sales_data &lhs,const Sales_data &a ...

  6. 《C++ Primer》14.3节练习

    练习14.13: 对于Sales_data类,其实我们并不需要再为它添加其他算术运算符.但是这里我们可以考虑为它实现一个减法运算符. class Sales_data {friend Sales_da ...

  7. 《C++ Primer》14.1节练习

    练习14.1: 不同点: 重载操作符必须具有至少一个class或枚举类型的操作数. 重载操作符不保证操作数的求值顺序,例如对&&和||的重载版本不再具有"短路求值" ...

  8. 《C++ Primer》7.4节练习

    练习7.33: 题目代码: pos Screen::size()const {return height*width; } 如果添加如题目所示的size函数将会出现编译错误.因为该函数的返回类型pos ...

  9. 《C++ Primer》7.2节练习

    练习7.16: 在类的定义中,可以包含0个或者多个访问说明符,并且对于某个访问说明符能出现多少次以及能出现在哪里都没有严格规定.每个访问说明符指定接下来的成员的访问级别,有效范围直到出现下一个访问说明 ...

  10. 《C++ Primer》1.51节练习

    练习1.20 #include <iostream> #include "Sales_item.h" using namespace std;int main() {S ...

最新文章

  1. UA MATH563 概率论的数学基础 中心极限定理5 Renyi定理
  2. 段错误 (核心已转储)_向大厂看齐!为自己的程序增加自动转储的功能!
  3. 絮语之一:悲悯·海·《垂死的肉身》
  4. 【转】OWIN是什么?
  5. Lua语言中pairs和ipairs的区别
  6. C++socket编程(二):系统socket库介绍
  7. Lintcode: Implement Queue by Stacks 解题报告
  8. bboss 会话管理session操作使用示例
  9. Oracle数据库脚本学习:建用户、删用户、建表、改表、删表
  10. 一般纳米材料是指尺度为_水溶性单分散纳米材料的开发意义
  11. 【“玩物立志”-scratch少儿编程】迷宫游戏-图片素材
  12. 【Pytorch】基于卷积神经网络实现的面部表情识别
  13. MC34063升压电路中常见的几种问题
  14. 反问疑问_反问疑问句
  15. 2019年秋冬季读书笔记
  16. 蓝桥杯试题 基础练习 数列特征python
  17. 怎么就是不弹出key呢?提交前14个字符即可过关
  18. 解决:interface conversion: interface {} is float64, not int
  19. neuoj1472 yuki的氪金之旅(倒置树状数组
  20. 数值计算方法——乘幂法和反乘幂法

热门文章

  1. C#委托、事件学习之(三)——热水器烧水案例
  2. C语言试题九十之实现输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
  3. (十一)python3 只需3小时带你轻松入门——面向对象
  4. encodingaeskey java,消息体签名与加解密-开发者QA
  5. 软件配置管理(五)常用重构技巧
  6. python listbox排序_python – 从tkinter.Listbox中提取项目列表
  7. 山西最值得一去的5座古镇,你都去过吗?
  8. 导师都有哪些“秘密”没有告诉你?
  9. 目瞪口呆!137亿年的宇宙演化,竟然如此震撼!简直颠覆想象....
  10. 晚上我们一起去白码会所玩啊!