例外处理和命名空间.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例外处理和命名空间

第11章 例外处理和命名空间 11.1 例外处理 大型和十分复杂的程序往往会产生一些很难查找的甚至是无法避免的运行时错误。 当发生运行时错误时,不能简单地结束程序运行,而是退回到任务的起点,指出错误,并由用户决定下一步工作。 面向对象的异常处理(exception handling)机制是C++语言用以解决这个问题的有力工具。 11.1 例外处理 异常的概念 : 这里所讲的异常(exception)是程序可能检测到的,运行时不正常的情况,异常就是程序在运行的过程中,由于使用环境的变化以及用户的不当操作而产生的错误。 例如,内存不足时,应用程序请求分配内存;请求打开硬盘上不存在的文件;程序中出现了以零为除数的错误;打印机未打开,调制解调器掉线等,导致程序运行中挂接这些设备失败等等,都会引发异常。对这些错误,应用程序如果不能进行合适的处理,将会使程序变得非常脆弱,甚至不可使用。因此,对于这些可以预料的错误,在程序设计时,应编制相应的预防代码或处理代码,以便防止异常发生后造成严重后果。 11.1 例外处理 一个应用程序,既要保证其正确性,还应有容错能力,也就是说,既要在正确的应用环境中、用户操作正确时运行正常、正确,而且要在应用环境出现意外或用户操作不当时,也应有合理的反应。 特别在一个大型的程序(软件)中,程序各部分是由不同的小组编写的,它们由公共接口连起来,错误可能就发生在相互的配合上,也可能发生在事先根本想不到的个别的条件组合上。 11.1 例外处理 本章介绍的技术,尽管是为大型软件工程开发所发展的,但是它在标准C++中已经成为一个标准的技术,在任何规模的程序中都可以使用。 C++提供了一些内置的语言特性来抛出(throw)异常,用以通知“异常已经发生”,然后由预先安排的程序段来捕获(catch)异常,并对它进行处理。这种机制可以在C++程序的两个无关(往往是独立开发)的部分进行“异常”通信。由程序某一部分引发了另一部分的异常,这一异常可回到引起异常的部分去处理(沿着程序函数的调用链)。这也是分清处理责任的好办法。 异常处理机制 异常处理的基本思想 小型程序在出现异常时,一般是将程序立即中断运行,无条件释放所有资源。 如: 11.1 例外处理 例14.1 以下程序当除数为零时,停止运行并给出提示信息 #includeiostream.h #includestdlib.h double fuc(double x, double y) { if(y==0) { cerrerror of dividing zero.\n; exit(1); } return x/y;} void main() { fuc(2,3); fuc(4,0);} 11.1 例外处理 2. 大中型程序中,上述处理方法就过于简单粗糙。这是因为在大中型程序中,函数之间有着明确的分工和复杂的调用关系。发现错误的程序往往在函数调用链的低层,这样,简单地在发现错误的函数中处理异常,就没有机会把调用链中的上层函数已经完成的一些工作做妥善的善后处理。例如,上层函数已经申请了堆对象,那么释放堆对象的工作显然不能在底层函数中处理,从而使程序不能正常运行。因此,对于大中型程序来说,在程序运行中一旦发生异常,应该允许恢复和继续运行。 11.1 例外处理 恢复是指把产生异常的错误处理掉,中间可能要涉及一系列函数调用链的退栈,对象的析构,资源的释放等。继续运行是指异常处理之后,在紧接着异常处理的代码区域中继续运行。 异常处理实现 C++异常处理的步骤是: 1.定义异常(try语句块) try { //将可能产生异常的语句放在try语句块中 } 2.定义异常处理(catch语句块) 将处理异常的语句放在catch语句块中,以便异常被传递来时处理。通常,异常处理是紧接在try语句块后的若干个相邻的catch语句,每一个catch语句的格式是: catch(异常类型1) { //异常处理语句块1 } 11.1 例外处理 3.抛弃异常(throw语句) 检测是否产生异常,若是,则抛弃异常。抛弃异常语句的格式是: throw 表达式; 11.1 例外处理 11.1 例外处理 例14.2 处理文件打不开的异常 #includefstream.h #includeiostream.h #includestdlib.h void main() { ifstream source(c:

文档评论(0)

159****0071 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档