当前位置: 首页 > news >正文

C++ Primer第五版_第七章习题答案(1~10)

文章目录

      • 练习7.1
      • 练习7.2
      • 练习7.3
      • 练习7.4
      • 练习7.5
      • 练习7.6
      • 练习7.7
      • 练习7.8
      • 练习7.9
      • 练习7.10

练习7.1

使用2.6.1节定义的Sales_data类为1.6节的交易处理程序编写一个新版本。

#include <iostream>
#include <string>
using std::cin; using std::cout; using std::endl; using std::string;struct Sales_data
{string bookNo;unsigned units_sold = 0;double revenue = 0.0;
};int main()
{Sales_data total;if (cin >> total.bookNo >> total.units_sold >> total.revenue){Sales_data trans;while (cin >> trans.bookNo >> trans.units_sold >> trans.revenue){if (total.bookNo == trans.bookNo){total.units_sold += trans.units_sold;total.revenue += trans.revenue;}else{cout << total.bookNo << " " << total.units_sold << " " << total.revenue << endl;total = trans;}}cout << total.bookNo << " " << total.units_sold << " " << total.revenue << endl;}else{std::cerr << "No data?!" << std::endl;return -1;}return 0;
}

练习7.2

曾在2.6.2节的练习中编写了一个Sales_data类,请向这个类添加combine函数和isbn成员。

#ifndef CP5_ex7_02_h
#define CP5_ex7_02_h#include <string>struct Sales_data
{std::string isbn() const { return bookNo; };Sales_data& combine(const Sales_data&);std::string bookNo;unsigned units_sold = 0;double revenue = 0.0;
};Sales_data& Sales_data::combine(const Sales_data& rhs)
{units_sold += rhs.units_sold;revenue += rhs.revenue;return *this;
}#endif

练习7.3

修改7.1.1节的交易处理程序,令其使用这些成员。

#include "exercise7_2.h"
#include <iostream>
using std::cin; using std::cout; using std::endl;int main()
{Sales_data total;if (cin >> total.bookNo >> total.units_sold >> total.revenue){Sales_data trans;while (cin >> trans.bookNo >> trans.units_sold >> trans.revenue){if (total.isbn() == trans.isbn())total.combine(trans);else{cout << total.bookNo << " " << total.units_sold << " " << total.revenue << endl;total = trans;}}cout << total.bookNo << " " << total.units_sold << " " << total.revenue << endl;}else{std::cerr << "No data?!" << std::endl;return -1;}return 0;
}

练习7.4

编写一个名为Person的类,使其表示人员的姓名和地址。使用string对象存放这些元素,接下来的练习将不断充实这个类的其他特征。

#ifndef CP5_ex7_04_h
#define CP5_ex7_04_h#include <string>class Person
{std::string name;std::string address;
};#endif

练习7.5

在你的Person类中提供一些操作使其能够返回姓名和地址。这些函数是否应该是const的呢?解释原因。

#ifndef CP5_ex7_05_h
#define CP5_ex7_05_h#include <string>class Person
{std::string name;std::string address;
public:auto get_name() const -> std::string const& { return name; }auto get_addr() const -> std::string const& { return address; }
};#endif

应该是const的。因为常量的Person对象也需要使用这些函数操作。

练习7.6

对于函数add、read和print,定义你自己的版本。

#ifndef CP5_ex7_06_h
#define CP5_ex7_06_h#include <string>
#include <iostream>struct Sales_data
{std::string const& isbn() const { return bookNo; };Sales_data& combine(const Sales_data&);std::string bookNo;unsigned units_sold = 0;double revenue = 0.0;
};Sales_data& Sales_data::combine(const Sales_data& rhs)
{units_sold += rhs.units_sold;revenue += rhs.revenue;return *this;
}std::istream &read(std::istream &is, Sales_data &item)
{double price = 0;is >> item.bookNo >> item.units_sold >> price;item.revenue = price * item.units_sold;return is;
}std::ostream &print(std::ostream &os, const Sales_data &item)
{os << item.isbn() << " " << item.units_sold << " " << item.revenue;return os;
}Sales_data add(const Sales_data &lhs, const Sales_data &rhs)
{Sales_data sum = lhs;sum.combine(rhs);return sum;
}#endif

练习7.7

使用这些新函数重写7.1.2节练习中的程序。

#include "exercise7_6.h"int main()
{Sales_data total;if (read(std::cin, total)){Sales_data trans;while (read(std::cin, trans)){if (total.isbn() == trans.isbn())total.combine(trans);else{print(std::cout, total) << std::endl;total = trans;}}print(std::cout, total) << std::endl;}else{std::cerr << "No data?!" << std::endl;return -1;}return 0;
}
Footer

练习7.8

为什么read函数将其Sales_data参数定义成普通的引用,而print函数将其参数定义成常量引用?

因为read函数会改变对象的内容,而print函数不会。

练习7.9

对于7.1.2节练习中代码,添加读取和打印Person对象的操作。

#ifndef CP5_ex7_09_h
#define CP5_ex7_09_h#include <string>
#include <iostream>struct Person
{std::string const& getName()    const { return name; }std::string const& getAddress() const { return address; }std::string name;std::string address;
};std::istream &read(std::istream &is, Person &person)
{return is >> person.name >> person.address;
}std::ostream &print(std::ostream &os, const Person &person)
{return os << person.name << " " << person.address;
}#endif

练习7.10

在下面这条if语句中,条件部分的作用是什么?

if (read(read(cin, data1), data2))

read 函数的返回值是 istream 对象,if语句中条件部分的作用是从输入流中读取数据给两个data对象。

http://www.lryc.cn/news/45470.html

相关文章:

  • 2023年全国最新保安员精选真题及答案42
  • 通过 DVT 和 dbt 测试监控Airbyte数据管道
  • BootStrap4:组件
  • 菜鸟也能在10分钟内开发出3D数字化城市,这份干货教程请收好!
  • 【区块链技术开发】十个比较流行的以太坊智能合约开发框架
  • Linux三剑客之grep命令详解
  • 【Python】【进阶篇】二、Python爬虫的User-Agent用户代理
  • ORBSLAM3 --- 双目惯导执行ORBSLAM3(一):Stereo_intertail_euroc.cc文件解析
  • 五 MySQL 存储过程
  • 【指针函数和函数指针】
  • 实现卡片高度增加时的缓动动画效果
  • 什么是HRMS?哪些工作需要使用HRMS?
  • 【C语言蓝桥杯每日一题】—— 饮料换购
  • PMP适合哪些人考?
  • 中华好诗词大学季第二季(二)
  • 【Linux】时间日期指令、查找指令、压缩和解压指令
  • python社区志愿者服务管理系统-vue
  • 计算机网络 常见网卡信息
  • Python 自动化指南(繁琐工作自动化)第二版:附录 B:运行程序
  • 自然语言处理实战项目2-文本关键词抽取和关键词分值评估
  • 软件测试面试,项目经验板块如何答?初中高级测试工程师都问什么?
  • 软件测试之测试用例的设计
  • MySQL安装与配置(保姆级教程)
  • MATLAB算法实战应用案例精讲-【元启发式算法】随机蛙跳跃算法(SFLA)(附matlab代码实现)
  • 内网穿透:远程访问内网IP中的电脑
  • day4 selenium爬取数据总结
  • 信息收集之WAF绕过
  • 从数据到智慧,TOOM舆情监测系统让你的决策更加精准!
  • ChatGPT中文版网页插件-如何体验chatGPT
  • Docker的网络模式