第十二章望异常处理.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文档。上传文档
查看更多
第十二章望异常处理

12.1 异常的概念 一类是编译错误,即语法错误。这种错误的后 果是无法生成运行程序(*.exe),编译失败(程 序员可以根据错误提示改正此类错误); 另一类是在运行中发生的错误,它可以分为不 可预料的逻辑错误和可以预料的运行异常。 逻辑错误是由设计不当造成的,一般是不可预料的,但可以在设计时加以注意或专门写处理此问题的方法,从而避免此类问题的发生。而运行异常,是可以预料但不可避免的,它是由系统运行环境造成的,这些错误会使程序运行失常,甚至造成系统瘫痪。 异常处理机制是对所能预料到的运行错误进行处理的一套实现机制,针对这类问题,C++提供了强大的异常处理机制。在程序设计时,应该充分利用这种机制,分析并处理各种可能出现的异常情况,以提高程序的稳定性和容错能力。 12.2 异常处理的基本思想 12.3 C++异常处理的实现 C++语言提供对处理异常情况的内部支 持。throw和try、catch语句就是C++语言中用 于实现异常处理的机制。有了C++异常处理, 程序可以向更上层的方法传递意想不到的事 件,从而使程序能更好地从这些异常事件中恢 复过来。 12.3.1 异常处理的语法 throw表达式语法: throw 表达式 如果程序出现了异常,就可以使用throw语句抛掷这个异常(其中表达式的值可以是字符串、int、float、类类型等),把它抛掷给相应的处理者(类型匹配的catch块)。Throw的操作数表示异常的类型,语法上与return语句的操作数相似,如果程序中有多处需要抛掷异常,应该用不同的操作数类型来互相区别(其机制类似于对“catch函数”的重载)。 try语句块的语法: try { 待检测异常的函数序列 } catch(异常类型声明1) { 异常处理语句序列 } catch(异常类型声明2) { 异常处理语句序列 } … catch(…) { 异常处理语句序列 } 12.3.2 异常的实现步骤与简单实例 若想要实现一个异常处理,通常的设计步骤如下: ⑴定义异常中的try语句块,并将有可能产生错误的语句 序列写在try块中; ⑵定义处理异常的catch语句块,并将异常处理的语句 放在catch块中,以便异常被传递过来时立即得到处理; ⑶设计何时使用throw语句抛掷异常,检测是否产生异 常,若条件成立,则抛掷异常。 异常处理的执行过程如下: (1)应该把受保护的代码(即易发生异常的)放在try块中,当程序顺序 执行到达try块时,无论程序是否发生异常,都去顺序调用try块中的方 法,如hmean()方法。 (2)在try块被调用的方法中,编写检查异常的模块,如果出现异常,则 通过该方法中的throw抛出这个异常(这里是个字符串起到提示作 用)。 (3)异常处理程序中至少应该有一个catch语句块,用来捕获并处理这个 异常,前提是throw所抛出的类型必须与catch语句块中的异常类型相 匹配。 (4)如果该保护段在执行期间没有发生异常,那么try块后的catch块就不被执行,程序将从catch块后面的语句继续执行下去。 (5)程序中不应该出现异常类型相同的catch语句块,因为异常处理程序 是按照它出现的次序被检查的。只要找到一个匹配的异常类型,后面 的异常处理都将被忽略。 12.3.3 使用异常处理机制的规则 ⒈在try块之后必须紧跟一个或多个catch块,try块出现之前不能出现catch块。 ⒉catch关键字后括号内必须含有数据类型,因为“捕获”是利用数据类型匹配的原则实现的。异常类型可以声明为省略号(…),形如catch(…), 表示可以处理任何类型的异常。若首先出现的是catch (…),因为它可以捕获任何异常,所以其他的catch语句块都不再被检查,因此,catch (…)应该放在最后。 ⒊如果一个函数抛掷一个异常,但在通往异常处理函数的调用链中找不到与之匹配的catch块,则该程序通常以abort()函数调用终止。 ⒋如果所有异常都被处理完毕或者未发生异常,程序都将从最后一个catch语句块后面的程序行继续执行。 ⒌请读者注意,在VC++6.0环境中,为了使用异常处理机制,需要进行如下设置 ⑴打开菜单栏中 Project 中的 Settings 选项。 ⑵ 选择C/C++选项卡。 ⑶ 在Category栏中选择C++ Language。 ⑷ 选择Enable Exception Handling。 12.4 异常抛出与捕获的对应关系 12.5 标准程序库异常处理 C++标准提供了一些标准异常,

文档评论(0)

173****1616 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档