当前位置: 首页 > 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对象。

相关文章:

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; us…...

2023年全国最新保安员精选真题及答案42

百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 421.根据《保安服务管理条例》规定&#xff0c;取得《保安员证》的身体条件是&#x…...

通过 DVT 和 dbt 测试监控Airbyte数据管道

为数据复制或数据迁移构建 ELT 数据管道的一个重要部分是能够在出现错误时进行监视并获得通知。如果您不知道错误&#xff0c;您的数据将包含不一致之处&#xff0c;并且您的报告将不准确。由于使用的工具数量众多&#xff0c;大多数管道的复杂性使得设置监视和警报系统更具挑战…...

BootStrap4:组件

一、按钮 1.1、普通按钮 Bootstrap包括多个预定义的按钮样式&#xff0c;每个样式都有自己的语义目的&#xff0c;另外还有一些额外的功能可以用于更多的控制。 样式效果&#xff1a; 源代码&#xff1a; <body class"container"><button type"bu…...

菜鸟也能在10分钟内开发出3D数字化城市,这份干货教程请收好!

朋友被老板要求在2周内负责一个监控用的的3D全景地图项目&#xff0c;他每天能盯着程序员加班加点的干&#xff0c;可按照进度仍然赶不上ddl。我听了他的诉求&#xff0c;联想到之前参加过的一个宣讲会里提到的新软件&#xff0c;把东西推荐给他后&#xff0c;他让同事跑了一下…...

【区块链技术开发】十个比较流行的以太坊智能合约开发框架

专栏:【区块链技术开发】 前期文章: 【区块链技术开发】剖析区块链Ganache模拟器工具及其智能合约部署区块链的查询方式 【区块链技术开发】基于Web3.js以太坊网络上的智能合约的交互及其应用 【区块链技术开发】OpenZeppelin智能合约库:提高智能合约的安全性和可靠性,加速…...

Linux三剑客之grep命令详解

1、概述 Linux三剑客&#xff1a;grep、sed、awk。grep主打查找功能&#xff0c;sed主要是编辑行&#xff0c;awk主要是分割列处理。本篇文章我们详细介绍grep命令。 grep &#xff08;global search regular expression(RE) and print out the line&#xff0c;全面搜索正则…...

【Python】【进阶篇】二、Python爬虫的User-Agent用户代理

目录二、Python爬虫的User-Agent用户代理2.1 常见的 User-Agent 请求头2.2 爬虫程序UA信息2.3 重构爬虫UA信息二、Python爬虫的User-Agent用户代理 User-Agent 即用户代理&#xff0c;简称“UA”&#xff0c;它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用…...

ORBSLAM3 --- 双目惯导执行ORBSLAM3(一):Stereo_intertail_euroc.cc文件解析

1.执行双目例程的参数 在Clion中&#xff0c;我们输入以下参数&#xff1a; /home/liuhongwei/Desktop/slam/ORB_SLAM3_detailed_comments-master/Vocabulary/ORBvoc.txt /home/liuhongwei/Desktop/slam/ORB_SLAM3_detailed_comments-master/Examples_old/Stereo-Inertial/EuRo…...

五 MySQL 存储过程

五、企业级开发技术 5.1 存储过程 关于存储过程我只能说请看下图&#xff0c;这是阿里巴巴发布的《阿里巴巴Java开发手册&#xff08;终极版&#xff09;v1.3版本》在 MySQL 第七条中强制指出禁止使用存储过程 所以对于存储过程不必深究&#xff0c;做到会写能看懂即可 [外链…...

【指针函数和函数指针】

指针函数和函数指针1. 概述2. 案例分析指针函数函数指针1. 概述 函数指针和指针函数是两个不同的概念。 函数指针是指一个指针变量&#xff0c;该指针变量存储了一个函数的地址。通过函数指针可以实现动态调用函数&#xff0c;根据需要在程序运行时指定要调用的函数。函数指针的…...

实现卡片高度增加时的缓动动画效果

在开发中&#xff0c;我们可能会遇到需要让卡片高度由内容撑起&#xff08;即不能手动设置height&#xff09;&#xff0c;并且在高度增加时增加缓动动画的需求。本文将介绍几种实现方式。 文章目录方法1&#xff1a;使用CSS的max-height属性和:hover伪类特定例子&#xff1a;鼠…...

什么是HRMS?哪些工作需要使用HRMS?

当今企业的发展离不开技术支持&#xff0c;同样&#xff0c;在管理方面也需要与时俱进&#xff0c;进行数字化转型。人力资源技术的运用是企业管理数字化转型的重要表现之一。在企业选择一款HR软件之前&#xff0c;应该先认识到&#xff0c;什么是人力资源管理软件——即HRMS。…...

【C语言蓝桥杯每日一题】—— 饮料换购

【C语言蓝桥杯每日一题】—— 饮料换购&#x1f60e;前言&#x1f64c;饮料换购&#x1f64c;喝汽水问题&#x1f64c;饮料换购解题源码分享 &#x1f60a;总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的…...

PMP适合哪些人考?

其实很多小白在最开始了解PMP考试的时候都会有同一个问题&#xff0c;那就是&#xff1a; “我适不适合考PMP&#xff1f;” 如果想做管理&#xff0c;那么一定要考PMP证书。PMP证书是国际认证&#xff0c;在国内的认可度也很高&#xff0c;可以说是管理岗位的入门认证。注意…...

中华好诗词大学季第二季(二)

第四期 1,宋代林升的《题临安邸》是一首著名的墙头诗&#xff0c;请问这里的”邸“指的是什么&#xff1f;旅店 2,宋代林升的《题临安邸》的“临安”是指那个城市&#xff1f;杭州 3,“申黜褒女进&#xff0c;班去赵姬升”具体写到了历史上那四个女人 申皇后&#xff0c;褒…...

【Linux】时间日期指令、查找指令、压缩和解压指令

目录1 时间日期类1.1 date指令-显示当前日期1.2 date指令-设置日期1.3 cal指令2 搜索查找类2.1 find指令2.2 locate指令2.3 grep指令和管道符号 |3 压缩和解压类3.1 gzip/gunzip 指令3.2 zip/unzip 指令1 时间日期类 1.1 date指令-显示当前日期 基本语法 date (功能描述:显示…...

python社区志愿者服务管理系统-vue

本系统主要实现一个基于web的校园志愿者活动系统。此网站是为了给予在校生通过网上报名来参加志愿者活动&#xff0c;省去了各种班群申报的中间环节。利用数据库和python进行web开发。 能实现的基本功能如下&#xff1a; (1)登陆、注册的功能&#xff1a;用户填写用户名和密码进…...

计算机网络 常见网卡信息

文章目录1. PCI 网卡2. PCI Express 网卡3. USB网卡4. 无线网卡万兆网卡光纤网卡1. PCI 网卡 接口类型&#xff1a;PCI 传输速率&#xff1a;10/100Mbps或1000Mbps 支持协议&#xff1a;TCP/IP、UDP、IPX/SPX等 缓存大小&#xff1a;通常为64KB或128KB 2. PCI Express 网卡 …...

Python 自动化指南(繁琐工作自动化)第二版:附录 B:运行程序

原文&#xff1a;https://automateboringuff.com/2e/appendixb/ 如果您在 Mu 中打开了一个程序&#xff0c;运行它只需按 F5 或单击窗口顶部的运行按钮。这是一种在编写程序的同时运行程序的简单方法&#xff0c;但是打开 Mu 来运行你完成的程序可能是一种负担。根据您使用的操…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...