网站大量收购独家精品文档,联系QQ:2885784924

C语言大学教程--C++语言第24章.ppt

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

异常的重新抛出 C++异常处理的嵌套结构中,其规则是外 层的throw语句投出的异常流入外层的catch捕 获器,而内部catch块接受的是同级try块 throw语句抛来的信息。 如果程序员期望内层触发的错误源输送到 高层专门的程序段予以处理,而不是当前层的 catch块中解决,需要使用异常的层层转递手 段,这就是throw语句不带表达式的默认形式。 异常的重新抛出 不带表达式的throw语句内嵌在catch内,意味着当前catch块在入口中捕获的类型信息,throw接力地将此类型信息抛出到上层的相应类型入口的catch处理器。特定异常流就从内层中向外传到需要的地方。 #include iostream #include exception using namespace std; void throwException() { try { cout throws an exception\n; throw exception(); } catch ( exception ) { cout Exception handled ; throw; } cout print?\n; } int main() { try { throwException(); cout error; } catch ( exception ) { cout \n\nException handled in main\n; } cout in main\n; return 0; } 异常指定 指定由函数抛出的异常 例如: 函数原型为:int f( int ) throw (int,float); 函数定义为:int f(int i) throw (int , float ) { if (i 0) throw i ; if ( i 0) throw 0.0; } 函数原型中的异常说明要与其实现中的异常一致。 使用函数异常说明的基本原因: 清楚地告诉函数的调用者,该函数可能会抛出哪些类型的异常,以便用户能够编写合适的异常处理器。 用户一般无法看到函数的实现(例如库函数),因此用户只能浏览函数原型才知道一个函数可能会抛出哪些类型的异常。 异常指定的好处 约束函数实现者,防止抛出异常说明列表中没有说明的异常. 指导函数的调用者编写正确的异常处理程序。 异常指定 函数异常说明的几种情况 只能抛出一种异常 double Devide(double x, double y) throw (DevidedByZero); 可能抛出多种异常 bool func(const char *) throw (T1, T2, T3); 不抛出任何异常 void g() throw () 可能抛出任何异常,也可能不抛出任何异常 void k(); 异常指定 #include iostream using namespace std; int main( ) {void f1( ); try {f1( );}//调用f1( ) catch(double) {cout″OK0!″endl;} cout″end0″endl; return 0; } void f1( ) {void f2( ); try {f2( );} //调用f2( ) catch(char) {cout″OK1!″;} cout″end1″endl;} void f2( ) {void f3( ); try {f3( );} //调用f3( ) catch(int) {cout″Ok2!″endl;} cout″end2″endl; } void f3( ) {double a=0; try {throw a;} //抛出double类型异常信息 catch(float) {cout″OK3!″endl;} cout″end3″endl; } 执行上面的程序。图14.1为有函数嵌套时异常处理示意图。 图14.1 异常与继承 基类的异常处理器可以捕获子类的异常。反过来不行。 #in

文档评论(0)

yingzhiguo + 关注
实名认证
内容提供者

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

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档