- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 异常处理 #include iostream.h enum errs{err0,err1,err2}; void f(int test) { try{ if(test==0) throw err0; if(test==1) throw err1; if(test==2) throw err2; } catch(errs er){ switch(er){ case err0: coutCaught err0 exception\n; break; case err1: coutCaught err1 exception\n; break; case err2: coutCaught err2 exception\n; break; } } } 例12.5 异常枚举成组 void main() { f(2); f(1); f(0); } 执行结果如下: Caught err2 exception Caught err1 exception Caught err0 exception * * 异常(exception)——程序运行期出现的问题或错误。 异常处理——结构化的处理异常的方法,在有可能发生异常的地方做出预见性的安排。 非结构化异常处理: 用 exit (n) 或 return (n)的运行期错误处理机制,具有“一个入口,多个出口”的特点。 结构化的异常处理: 积极的运行期问题处理机制。当异常出现后,可按“警告—忽略”、“对话—补救”或安全退出等模式,使程序可以在对运行条件做出适当安排或改善后继续运行下去。 12. 1 异常处理的基本语法 C++的异常处理的基本思想是将异常的检测与处理分离。 在一个函数体中检测到异常条件满足,但无法确定相应的处理方法时,就引发一个异常,然后由函数的直接或间接调用者处理此异常。 C++的异常处理建立在三个关键字基础之上: try 、catch和throw。 C++异常处理语句的一般形式如下: try{ //try 块内监视异常 if (条件)throw exception; //由throw 抛出异常 …; //其它语句 } catch( 类型1 参数1 ){ //catch块内处理代码 } catch( 类型2 参数2 ){ …; } …… catch( 类型n 参数n ){ …; } 注意:C++通过try夺取运行期的环境控制权,即异常的引发是由程序员控制的,而不是由程序运行环境或计算机硬件控制的。任何要检测异常的语句或函数调用都必须在try语句块中执行。异常由紧跟在try块后的catch语句来捕获并处理。 #includeiostream.h const double PI=3.1416; void invoke(int x) { try{ if(x==0) throw x+5; //抛出int型的异常 if(x==1) throw A; //抛出cahr型的异常 if(x==2) throw An apple; //抛出字符串型的异常 if(x==3) throw PI; //抛出double型的异常 } catch(int i) { coutcatch a integer iendl; } catch(char c) { coutcatch a char cendl; } catch(char str[10]) { coutcatch a string strendl; } catch(double d) { coutcatch a double dendl; } } 程序运行结果: catch a integer 5 catch a char A catch a string An apple catch a double 3.1416 例12.1 异常处理演示。 void main() { invoke(0); invoke(1); invoke(2); invoke(3); } 编写异常处理代码的规则: (1) 可以有数量不限的catch处理程序出现在try块之后,在try 块出现之前不能出现 catch块。 编写异常处理代码的规则: (2) 在关键字catch之后的圆括号内应包括数据和类型声明。因为捕获是根据throw exception
文档评论(0)