c++第十章习题解答

c++第十章习题解答

ID:8524263

大小:35.50 KB

页数:7页

时间:2018-03-31

c++第十章习题解答_第1页
c++第十章习题解答_第2页
c++第十章习题解答_第3页
c++第十章习题解答_第4页
c++第十章习题解答_第5页
资源描述:

《c++第十章习题解答》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、7第十章异常处理习题第十章异常处理习题一.基本概念与基础知识自测题10.1填空题10.1.1C++程序将可能发生异常的程序块放在(1)中,紧跟其后可放置若干对应的(2),在前面所说的块中或块所调用的函数中应该有对应的(3),由它在不正常时抛出(4),如与某一条(5)类型相匹配,则执行该语句。该语句执行完后,如未退出程序,则执行(6)。如没有匹配的语句,则交C++标准库中的(7)处理。答案:(1)try块(2)catch子句(3)throw表达式(4)异常(5)catch子句(6)后面的一条语句(7)terminate()10.1.

2、2throw表达式的行为有点像函数的(1),而catch子句有点像函数的(2)。函数的调用和异常处理的主要区别在于:建立函数调用所需的信息在(3)时已经获得,而异常处理机制要求(4)时的支撑。对于函数,编译器知道在哪个调用点上函数被真正调用,而对异常处理,异常是(5)发生的,并沿(6)查找异常处理子句,这与(7)多态是(8)。答案:(1)调用(2)定义(3)编译(4)运行(5)随机(6)调用链逆向(7)运行时的(8)不一样的10.1.3异常也适用类的层次结构,与虚函数的规则(1),基类的异常(2)派生类异常catch子句处理,而反

3、过来则(3)。答案:(1)相反(2)不能被(3)能处理10.1.4异常处理时与函数重载(1),异常处理是由(2)catch子句处理,而不是由(3)catch子句处理,所以catch子句(4)是很重要的。答案:(1)解析不同(2)最先匹配到的(3)最佳匹配的(4)排列次序7第十章异常处理习题10.1简答题10.1.1当在try块中抛出异常后,程序最后是否回到try块中,继续执行后面的语句?答:不会回到try块中。。10.1.2什么叫做栈展开(stackunwinding)?异常在其中按怎样的步骤寻求处理?答:因发生异常而逐步退出复合

4、语句和函数定义,被称为栈展开(stackunwinding)。栈展开才是异常处理的核心技术。寻找匹配的catch子句有固定的过程:如果throw表达式位于try块中,则检查与try块相关联的catch子句列表,看是否有一个子句能够处理该异常,如果有匹配的,则该异常被处理;如果找不到匹配的catch子句,则在主调函数中继续查找。如果一个函数调用在退出时带有一个被抛出的异常未能处理,而且这个调用位于一个try块中,则检查与该try块相关联的catch子句列表,看是否有一个子句匹配,如果有,则处理该异常;如果没有,则查找过程在该函数的主

5、调函数中继续进行。即这个查找过程逆着嵌套的函数调用链向上继续,直到找到处理该异常的catch子句。只要遇到第一个匹配的catch子句,就会进入该catch子句,进行处理,查找过程结束。10.1.3为什么C++要求资源的取得最好放在构造函数中,而资源的释放在析构函数中?答:退出调用链时必须释放所有资源。随着栈展开,在退出的复合语句和函数定义中声明的局部变量的生命期也结束了。在栈中分配的局部量占用的资源也被释放,由系统回收。但是如果函数动态获得过资源(包括用new运算符取得的资源和打开的文件),因异常,这些资源的释放语句可能被忽略,则

6、这些资源将永远不会被自动释放。在栈展开期间,当一个复合语句(或语句块)或函数退出时,在退出的域中有某个局部量是类对象,栈展开过程将自动调用该对象的析构函数,完成资源的释放。所以C++异常处理过程本质上反映的是“资源获取是由构造函数实现,而资源释放是由析构函数完成”这样一种程序设计技术。10.1.4为什么要有异常重新抛出?异常重新抛出与处理的次序及过程是怎样的?答:当catch语句捕获一个异常后,可能不能完全处理异常,在完成某些操作后,catch子句可能决定该异常必须由函数链中更上级的函数来处理,这时catch子句可以重新抛出(re

7、throw)该异常,把异常传递给函数调用链中更上级的另一个catch子句,由它进行进一步处理。rethrow表达式仍为:throw;但仅有一个关键字,因为异常类型在catch语句中已经有了,不必再指明。被重新抛出的异常就是原来的异常对象。但是重新抛出异常的catch子句总是做了些工作,也应该把自己做过的工作告诉下一个处理异常的catch子句,所以往往要对异常对象做一定修改,以表达某些信息,这时catch子句中的异常声明必须被声明为引用(参见上节),这样修改才能真正在异常对象自身中,而不是在拷贝中进行。10.1.5什么是异常规范?答

8、:异常规范(exceptionspecification)提供了一种方案,可以随着函数声明列出该函数可能抛出的异常,并保证该函数不会抛出任何其他类型的异常。10.1.6当异常被组织成类层次结构时,对应catch子句应怎样排列?为什么?答:7第十章异

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。