| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 《C++ Primer》第18章 18.1节习题答案 -> 正文阅读 |
|
[C++知识库]《C++ Primer》第18章 18.1节习题答案 |
《C++ Primer》第18章 用于大型程序的工具 本章介绍了一些用于大型程序开发的语言特性,包括: ●异常处理。 ●命名空间。 ●多重继承与虚继承。 本章的练习着重帮助读者理解异常的基本概念,练习异常捕获和异常处理的设计;理解命名空间和名字解析;理解多重继承和虚继承的概念,并进行相应的设计练习。 18.1节习题答案 练习18.1:在下列throw语句中异常对象的类型是什么?
如果将(b)中的throw语句写成了throw p将发生什么情况? 【出题思路】 理解异常对象的类型的匹配方法和规则。 【解答】 (a)异常对象r的类型是range_error。 (b)被抛出的异常对象是对指针p解引用的结果,其类型与p的静态类型相匹配,为exception。若写成throw p,则抛出的异常对象是exception*类型。读者可尝试编译、运行这几条语句,观察系统的提示。 练习18.2:当在指定的位置发生了异常时将出现什么情况?
【出题思路】 深入理解异常发生时可能对程序已运行部分产生的影响。 【解答】 在new操作后发生的异常使得动态分配的数组没有被撤销,从而造成内存泄漏。 练习18.3:要想让上面的代码在发生异常时能正常工作,有两种解决方案。请描述这两种方法并实现它们。 【出题思路】 在理解异常发生可能造成的后果之后,尝试使用try-catch方法和封装策略正确处理异常。 【解答】 方法一:将有可能发生异常的代码放在try块中,以便在异常发生时捕获异常。
方法二:定义一个类来封装数组的分配和释放,以保证正确释放资源:
函数exercise相应修改为:
注意,此处给出的Resource类非常简略,实际应用时,还需定义其他操作,包括复制构造函数、复制操作、解引用操作、箭头操作、下标操作等,以支持内置指针及数组的使用方式并保证自动删除Resource对象所引用的数组。另外,可将该Resource类定义为类模板,以支持多种数组元素类型。 练习18.4:查看图18.1(第693页)所示的继承体系,说明下面的try块有何错误并修改它。
【出题思路】 理解异常处理中catch语句的匹配顺序。 【解答】 该try块中使用的exception、runtime_error及overflow_error是标准库中定义的异常类。它们是因继承而相关的:runtime_error类继承exception类,overflow_error类继承runtime_error类。在使用来自继承层次的异常时,catch子句应该从最低派生类型到最高派生类型排序,以便派生类型的处理代码出现在其基类类型的catch之前,所以上述块中,catch子句的顺序错误。 可修改为:
练习18.5:修改下面的main函数,使其能捕获图18.1(第693页)所示的任何异常类型:
处理代码应该首先打印异常相关的错误信息,然后调用abort(定义在cstdlib头文件中)终止main函数。 【出题思路】 本题练习捕获并打印所有类型的异常。 【解答】
练习18.6:已知下面的异常类型和catch语句,书写一个throw表达式使其创建的异常对象能被这些catch语句捕获:
【出题思路】 理解使用throw时异常对象的类型一般需要与catch语句捕获的对象类型对应。 【解答】
练习18.7:根据第16章的介绍定义你自己的Blob和BlobPtr,注意将构造函数写成函数try语句块。【出题思路】 本题练习在实际应用中处理构造函数异常的常用方法:使用try语句块。 【解答】
练习18.8:回顾你之前编写的各个类,为它们的构造函数和析构函数添加正确的异常说明。如果你认为某个析构函数可能抛出异常,尝试修改代码使得该析构函数不会抛出异常。 【出题思路】 练习18.7中已经说明了构造函数的异常处理方法,练习18.8中着重理解析构函数的异常说明。 【解答】
练习18.9:定义本节描述的书店程序异常类,然后为Sales_data类重新编写一个复合赋值运算符并令其抛出一个异常。 【出题思路】 本题练习书店应用程序中复合赋值运算符的编写和异常判断。 【解答】
练习18.10:编写程序令其对两个ISBN编号不相同的对象执行Sales_data的加法运算。为该程序编写两个不同的版本:一个处理异常、另一个不处理异常。观察并比较这两个程序的行为,用心体会当出现了一个未被捕获的异常时程序会发生什么情况。 【出题思路】 体会处理或不处理异常对程序的影响。下面是处理异常和不处理异常的主要程序片段。 【解答】
练习18.11:为什么what函数不应该抛出异常? 【出题思路】 深入理解what函数的作用和在异常处理中所处的重要位置。 【解答】 what函数是在catch异常后用于提取异常基本信息的虚函数,what函数是确保不会抛出任何异常的。如果what函数抛出了异常,则会在新产生的异常中由于what函数继续产生异常,将会产生抛出异常的死循环。所以what函数必须确保不抛出异常 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:57:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |