- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章模板和异常处理详解
10.3 异常处理 10.3.1 异常处理的基本思想 10.3.2 异常处理的实现 1、throw语句 2、try…catch语句 3、try…catch语句的嵌套 4、相关的几点说明 举例 【例10-8】试分析下面程序的输出结果 。 #includeiostream.h void main() { try{ coutThis is a Test!endl; throw 1; //A行 coutIt can not show!endl; //B行 } catch(char) { cout“******”endl; //C行 } //D行 catch(int a) { cout“++++++”endl; //E行 cout”a=”aendl; //F行 } catch(…) { cout”catch all type!”; //G行 } cout”Test is end!”endl; / /H行 } 运行结果及分析 运行结果: This is a Test! ++++++ a=1 Test is end! 程序分析: 1、本程序主要是展示try…catch语句的使用;程序的结构是由try和两个catch语句构成,其中:两个catch语句是并列的。 2、程序的执行是从按从上往下的顺序依次进行的,当执行到程序中的A行时,throw语句抛出了一个异常,这个异常的数据类型是int,值为1。程序转而去执行catch语句,而程序中的B行将不会执行。 运行结果及分析 3、两个catch语句哪个能执行呢?系统处理方法为:按照从上往下的顺序去看哪catch语句中的数据类型和throw抛出的数据类型相同,即首先判断程序中的C行中的catch语句中的数据类型是不是int,结果不是。程序将找到第二个catch语句,即程序中的E行,结果类型相同,并且有一个变量a。系统将对a进行赋值,即a=1;程序将继续执行F行,并输出a的值。结束了整个try…catch语句的执行。 4、程序中的G行,为catch语句中的“异常类型名”表示为三个点的形式,即表示捕获所有的异常,注意是从上往下查找catch语句时,找不到匹配的数据类型,系统将执行此catch中的语句块,如果找到,则不会执行此条语句。 5、在执行完try…catch语句后,系统将按照顺序执行后面的语句,即执行程序中的H行,执行完后整个程序执行结束。 try…catch语句是可以嵌套的,当某语句的执行中抛出异常时,首先在包含它的最内层的try语句块对应的catch块列表中查找与之匹配的处理块,如果内层的catch块列表类型都不能匹配,即不能捕获到相应异常,则逐步向外层进行查找。具体如下图所示: 3、try…catch语句的嵌套 举例 【例10-9】试分析下面程序的输出结果 。 #includeiostream.h void main() { try{ //A行 try{ //B行 throw a; //C行 coutfirst!endl; //D行 } catch(char) { //E行 throw; //F行 coutsecond!endl; //G行 } } catch (...){ //H行 cout抛出异常!endl; //I行 } } 运行结果及分析
文档评论(0)