C++程序设计 教学课件 作者 郑莉 第15章 _异常处理.pptVIP

C++程序设计 教学课件 作者 郑莉 第15章 _异常处理.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * 15.3 异常处理中的构造与析构 上例中,在执行异常处理程序段之前,程序首先将try子句的保护程序段中已经构造但还未析构的局部Test类的对象t析构,然后执行异常处理程序。 第15章异常处理 cout “从这里继续执行程序!” endl; system(“pause”); //用于显示“按任意键继续…” return 0; } 进入try语句块,开始调用tryfunc函数。 Test类对象构造! tryfunc函数抛出一个异常整数值! Test类对象析构! 捕捉到异常整数值: 100 从这里继续执行程序! 请按任意键继续. . . * 15.3 异常处理中的构造与析构 将上例与上节的处理求0倒数的异常的例子进行比较,可发现两个程序中的catch语句中异常类型声明参数的写法不同。 处理求0倒数异常的程序中的写法是: 本节例子中的写法是: 第15章异常处理 catch(int); catch(int x); * 15.3 异常处理中的构造与析构 上述两种写法从语法角度都是正确的。当只需知道保护程序段抛出了某个类型的异常时,上述两种写法都是完全正确的;当不仅希望知道抛出的异常类型,还希望可以调用抛出的异常对象的值。这种情况必须使用第二种写法,将异常类型声明参数中的“变量名”也写清楚,以便在处理程序段中调用。 第15章异常处理 * 15.3 异常处理中的构造与析构 throw语句还有一种不带表达式的使用方法,即只写一个throw。这种写法的作用是将当前正在处理的异常继续抛出,以供更高级的异常处理机制进行处理。 这样的单throw表达式只能出现在catch子句的处理程序段或处理程序段中调用的函数体中。 这种再次抛出的异常对象仍然是原始的异常对象,而不是它的拷贝。例如: 第15章异常处理 * 15.3 异常处理中的构造与析构 第15章异常处理 try { throw 1000; } catch(int) { 处理程序段前半部分; //对异常作出部分响应 throw; //将异常继续抛出 } * 15.4 标准程序库异常处理 在C++标准里提供了标准异常的层次,这个层次以exception为基类,从它开始逐层构建出整个层次关系,标准程序库抛出的全部异常均是这个基类的派生类。这些类的派生继承层次关系如下图所示: 第15章异常处理 * 15.4 标准程序库异常处理 第15章异常处理 * 15.4 标准程序库异常处理 从上面的层次关系图中,我们可以看到,从基类exception可以派生出两个直接派生类:runtime_error和logic_error,而这个两个直接派生类又各自派生出许多派生类。而对整个层次关系,基类exception提供了服务what(),它在每个派生类中都重新定义,用于发送各自的错误信息。 第15章异常处理 * 15.4 标准程序库异常处理 exception类的几个派生类的使用场合: bad_alloc异常:在程序执行期间,当全局操作符new运算出现申请内存失败时抛出该异常; bad_cast异常:在程序执行期间,如果动态类型转换操作失败,由dynamic_cast抛出该异常; bad_typeid异常:在程序执行期间,当进行类型辨别的过程中,出现typeid的参数为零或空指针时,则抛出该异常; 第15章异常处理 * 15.4 标准程序库异常处理 bad_exception异常:如果发生意外异常时,可以通过在函数的抛出表中加上std::bad_exception,使系统调用unexcepted()函数抛出该异常,否则会终止程序或调用set_unexpected指定的函数; 第15章异常处理 * 15.4 标准程序库异常处理 logic_error逻辑异常类:C++标准程序库异常总是派生自该类,该类表示程序逻辑中的错误或者在程序中违反了类的不变性原则等,这一类错误均可以通过正确的编写代码来防止。C++标准程序库提供了以下逻辑异常类的派生类: invalid_argument——当向函数传入无效参数时产生; length_error——当长度超过所操作的对象允许的最大长度时产生; out_of_range——当数组下标之类的数值越界时产生; domain_error——当出现非法预处理错误时产生。 第15章异常处理 * 15.4 标准程序库异常处理 ios_base::failure:由C++标准程序库提供的特殊异常,当数据流由于错误或到达文件末尾而出现状态改变时抛出该异常; runtime_error异常类:该类的派生异常类是几个其它异常类的基类,该异常类用于指出只能在程序

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档