VC程序设计第十章.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文档。上传文档
查看更多
VC程序设计第十章

第十章 异常处理 10.1 异常的概念 10.2 异常处理的机制 10.2 异常处理的机制 10.2 异常处理的机制 10.2 异常处理的机制 10.3 捕获异常 10.3 捕获异常 10.3 捕获异常 10.3 捕获异常 10.3 捕获异常 10.3 捕获异常 10.4 异常的重新抛出和catch_all子句 10.4 异常的重新抛出和catch_all子句 10.4 异常的重新抛出和catch_all子句 10.5 异常规范 10.5 异常规范 10.6 异常和继承 10.6 异常和继承 10.6 异常和继承 10.6 异常和继承 10.6 异常和继承 10.6 异常和继承 10.7 C++标准库的异常类层次结构 10.7 C++标准库的异常类层次结构 10.7 C++标准库的异常类层次结构 10.7 C++标准库的异常类层次结构 10.7 C++标准库的异常类层次结构 * * 第十章 异常处理   大型和十分复杂的程序往往会产生一些很难查找的甚至是无法避免的运行时错误。当发生运行时错误时,不能简单地结束程序运行,而是退回到任务的起点,指出错误,并由用户决定下一步工作。面向对象的异常处理(exception handling)机制是C++语言用以解决这个问题的有力工具。 函数执行时,放在try(测试)程序块中的任何类型的数据对象发生异常,都可被throw块抛出,随即沿调用链退回,直到被catch块捕获,并在此执行异常处理,报告出现的异常等情况。从抛出到捕获,应将各嵌套调用函数残存在栈中的自动对象、自动变量和现场保护内容等进行清除。如果已退到入口函数还未捕获则由abort()来终结入口函数。 异常处理在C++编程中已经普遍采用,成为提高程序健壮性的重要手段之一。 10.1 异常的概念 10.3 捕获异常 10.2 异常处理的机制 10.5 异常规范 10.7 C++标准库异常类 层次结构 10.6 异常和继承 10.4 异常的重新抛出 和catch_all子句    这里所讲的异常(exception)是程序可能检测到 的,运行时不正常的情况,如存储空间耗尽、数组越 界、被0除等等,可以预见可能发生在什么地方,但是无法确知怎样发生和何时发生。特别在一个大型的程序(软件)中,程序各部分是由不同的小组编写的,它们由公共接口连起来,错误可能就发生在相互的配合上,也可能发生在事先根本想不到的个别的条件组合上。 本章介绍的技术,尽管是为大型软件工程开发所发展的,但是它在标准C++中已经成为一个标准的技术,在任何规模的程序中都可以使用。 C++提供了一些内置的语言特性来产生(raise)或抛出(throw)异常,用以通知“异常已经发生”,然后由预先安排的程序段来捕获(catch)异常,并对它进行处理。这种机制可以在C++程序的两个无关(往往是独立开发)的部分进行“异常”通信。由程序某一部分引发了另一部分的异常,这一异常可回到引起异常的部分去处理(沿着程序函数的调用链)。这也是分清处理责任的好办法。 不再是一测到栈满或空就退出程序了,而是抛出一个异常。 template typename Tvoid StackT::Push(const Tdata){ if(IsFull()) throw pushOnFullT(data); //注意加了括号,是构造一个无名对象 elements[++top]=data; } templatetypename TT StackT::Pop(){ if(IsEmpty()) throw popOnEmptyT(); return elements[top--]; } 注意pushOnFull是类,C++要求抛出的必须是对象,所以必须有“()”,即调用构造函数建立一个对象。异常并非总是类对象,throw表达式也可以抛出任何类型的对象,如枚举、整数等等。但最常用的是类对象。throw表达式抛出异常为异常处理的第一步。在堆栈的压栈和出栈操作中发生错误而抛出的异常,理所当然地应由调用堆栈的程序来处理。 首先,在C++中异常往往用类(class)来实现,以栈为例,异常类声明如下: class popOnEmpty{...}; //栈空异常 class pushOnFull{...}; //栈满异常 请看下面的程序段给出try块与catch子句的关系: int m

文档评论(0)

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

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

1亿VIP精品文档

相关文档