第九章 常处理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * 如果已存在的异常在被捕获之前又有一个新的异常产生将造成异常不能被获取,最常见 的这种情况的产生原因是异常对象的构造函数自身会导致新的异常。 如果异常未能被捕获,特殊函数terminate( )将自动被调用。 * * * * 异常处理部分必须直接放在测试块之后。如果一个异常信号被抛出,异常处理器中第一个 参数与异常抛出对象相匹配的函数将捕获该异常信号,然后进入相应的c a t c h语句,执行异常 处理程序。c a t c h语句与s w i t c h语句不同,它不需要在每个c a s e语句后加入b r e a k用以中断后面程 序的执行。 捕获所有异常 前面论述过,如果函数没有异常规格说明,任何类型的异常都有可能被函数抛出。为了解 决这个问题,应创建一个能捕获任意类型的异常的处理器。这可以通过将省略号加入参数列表 (á la C)中来实现这一方案。 catch (. . . ) { cout an exception was thrown endl; } 为了避免漏掉异常抛出,可将能捕获任意异常的处理器放在一系列处理器之后。 如果已存在的异常在被捕获之前又有一个新的异常产生将造成异常不能被获取,最常见 的这种情况的产生原因是异常对象的构造函数自身会导致新的异常。 * * * * * * * * 如果函数实际抛出的异常类型与我们的异常规格说明不一致,将会产生什么样的结果呢? 这时会调用特殊函数unexpected( )。 unexpected( )是使用指向函数的指针而实现的,所以我们可通过改变指针的指向地址来改 变相对应的运算。 setunexpected( ) 函数可获取不带输入和输出参数的函数地址和void返回值。它还返回 unexpected指针的先前值,这样我们可存储unexpected( )函数的原先指针值,并在后面恢复它。 为了使用setunexpected( )函数,我们必须包含头文件EXCEPT.H。 面向对象程序设计(C++描述) 成信院 李代伟 面向对象程序设计(C++描述) 成信院 李代伟 第九章 异常处理 * */30 本章主要内容 异常处理的基本思想 C++异常处理的实现 抛出异常throw 捕获异常try,catch 异常处理中的构造与析构 异常规格说明 * */30 什么是异常? 应用程序要具有容错能力,当发生意外时也可作出适当处理,不会导致严重后果。所谓异常,包括用户误操作、外部设备或文件连接不正确、内存不足等。 传统的处理方法是使用中断指令,如abort, assert, exit, return, 错误处理代码掺杂于功能实现代码,降低了程序的可读性和可维护行, 而且不适合于代码重用。 c++的异常处理允许程序以结构化和顺序化的方式处理反常和意外的情况。 * */30 将异常检测与处理分离,出现异常的函数不需具备处理异常的能力。 当一个函数发生异常时,它抛出一个异常,调用者捕获并处理该异常。若调用者不能处理,还可抛出给上一级调用者处理,直至运行系统。若仍不能处理,将简单终止程序。 异常处理的基本思想 * */30 异常处理的基本思想 函数f( )捕获并处理异常 函数h( ) 引发异常 函数g( ) …… 调用者 异常传播方向 调用关系 * */30 异常处理的实现机制 抛掷异常的程序段 ...... throw 表达式; ...... 捕获并处理异常的程序段 try 复合语句 catch(异常类型声明) 复合语句 catch(异常类型声明) 复合语句 … * */30 若有异常则通过throw操作创建一个异常对象并抛掷。 将可能抛出异常的程序段嵌在try块中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。 如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。 catch子句按其在try块后出现的顺序被检查。匹配的catch子句将捕获并处理异常(或继续抛掷异常)。 catch(…)可以捕获任何异常,所以建议放在所以catch子句的最后。 如果匹配的处理器未找到,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序。 异常处理的实现机制 * */30 异常处理语法(抛出异常) try 块 try { // 需保护的测试块 } throw语句 throw 表达式; // 表达式可以是任意类型的对象 // throw语句必须在try块、catch块或其调用的

文档评论(0)

daixuefei + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档