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

C语言中级教程 异常处理-9.pptVIP

  1. 1、本文档共76页,可阅读全部内容。
  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文档。上传文档
查看更多
C语言中级教程异常处理-9ppt课件

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 异常接口声明的使用 #include iostream using namespace std; //该函数仅能抛出ints, chars, 和doubles. void XFun(int type) throw(int, char, double) { if(type==0) throw type; //抛出int if(type==1) throw a; //抛出char if(type==2) throw 123.23; //抛出double } void main() { try { XFun(0); } catch(int i) { cout Caught int\n; } catch(char c) { cout Caught char\n; } catch(double d) { cout Caught double\n; } } 异常面临的问题 异常机制是仅用于函数的,它与基本类型、基本运算符无关。 可是,运算符重载和模板的出现,使得这个界限模糊了:有的运算符竟也能抛出异常。因为它实质上是函数。 在catch中可以含有return catch子句中可以含有return 语句,但不属于异常处理的逻辑,而是函数的逻辑——为其所在的函数服务的一种功能:当发生异常并被捕获,经处理后,直接返回主调函数去,而不再执行catch之后的语句了。这是将函数的处理逻辑延伸到了catch中。 除非的确需要,不提倡使用这种结构。 异常处理的几种模式 * catch main() 函数 try throw * try main() try块内函数 throw catch throw * catch try main() try块内函数 try throw catch throw throw * 一抛 catch try main() throw try块内函数 try throw catch 二抛 try块的设置要点: 1.应将所有可能发生异常的代码都由try块覆盖; 2.throw是异常的发现者,应合乎逻辑地放在if语句中;凡是可能出现异常的地方,都应派throw去站岗; 3.一旦throw被启动,则一去不复返; 4.多个try块可以并列,亦可嵌套; 5.try保护块的含义是:既指定了侦错范围,又指定了跳跃范围。发现了出错要大块跳过,则try块要大;发现了出错不要大块跳过,则try块要小要并列,以免波及面过大; catch的作用: 1.将自动释放进入try块以来创建的对象,但不包括静态对象、堆对象; 2.执行catch有三种去向: A.轻度异常 此时try块覆盖的程序范围不大,且catch 中无exit(),程序在跳过一些语句后仍在执行; B.严重异常 程序在执行了紧急处理语句后调用exit()结束运行 C.矛盾上交 本层程序处理不了或不打算处理的异常,可用二次抛掷语句,交上级处理。这样做既跳过较大范围,又没有中断程序运行,是前两者的折衷。 如何用好异常处理技术 1. 分清异常发生时程序的流程和正常的程序控制流程的区别,不要将异常处理机制当成正常程序控制流程使用; 2. catch的参数应当使用引用而不是值传递,因为这样既可以提高效率,又能启用动态多态机制; 3. 在catch的排列上,定要将对派生类异常的捕获排列在基类异常的捕获之前;要将能“一网打尽”的异常捕获(如catch(void *)、catch(...))放在最后; 4. 要确保对派生类成员函数的异常声明至少与基类成员函数的异常声明一致,甚至更严格。 class T1 { } ; class T2 { } ; class T3 { } ; class T4 : public T1 { } ; class T5 : public T2 { } ; class Base { public: void f () throw ( T1,T2 ); void g () throw ( T3 ); void h () throw ( T2 ); }; class Derived :public Base { public: void f () throw ( T1 ,T2 ); // OK void g () throw

文档评论(0)

118zhuanqian + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档