C++课件10第十讲——异常处理.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十二章 异常处理 本章主要内容 异常处理的基本思想 C++异常处理的实现 异常处理中的构造与析构 编译错 编译时通不过,属语法错,最浅层次的错误。 逻辑错 设计缺陷,编译器无法发现,只能靠人工分析跟踪排除,错误层次中等。 运行错 调试时无法发现,运行时才出现,往往由系统环境引起,属可予料但不可避免。必须由语言的某种机制予以控制。 一天,某公司派小张去机场提货,派小王去银行存款。 机场仓库失火,小张没提出货,也没回公司报告,原来一根筋的他在一边看热闹,可公司上下急得团团转。 在去银行路上,小王遇到抢匪打劫,小王立即报警,并报告了公司。马上协助警方追捕抢匪,追回存款,再送银行完成了存款任务。 假设,你是公司经理,你需要什么样的员工? 对于可予料但不可避免的程序错误,不能眼睁睁看着它发生而无所作为(只会用exit()),要将消极等待变为积极预防,还要将预防的处理内容归纳整理,分门别类地作成类。 积极之意是,不能只凭编程经验这种个体性偶然性的做法,而要凭借人人都掌握的规范圆满的处理。 这规范是指在函数的处理中设下陷阱,一旦触发异常,定会被异常处理所收容,统一归口处理。 默认的 程序中断执行。 特制的——用“异常处理” 转而执行特制的处理函数 。 允许从异常抛出点把任意数量的信息以类型安全的方式传给异常处理器; 对于没有抛出异常的代码段,不应有任何额外的系统(时间、空间)开销; 应保证所抛出的任何异常都能被适当的处理器捕获; 通过语言提供的某种语法,程序员可以写出自己的异常处理器; 能够直接应用到多线程程序中; ... 可见异常处理机制实际上是一种运行时通知机制。 由于c/c++是函数性语言,函数的调用是嵌套的,异常的发生地和处理地就很可能不在同一个模块中,逻辑上讲应是嵌套的; 异常一旦发生,则意味着后续语句不可能再执行了。 异常处理的基本思想 异常处理的实现机制 抛掷异常的程序段 ...... throw 表达式; ...... 捕获并处理异常的程序段 try 复合语句 catch(异常类型声明) 复合语句 catch(异常类型声明) 复合语句 … 异常处理的语法结构 这三个关键字分工明确,各司其职: throw负责发现异常,抛掷异常对象;若放在函数声明中则又称为异常接口声明; try设置了一个侦错范围,又叫保护段。其实是划定了一个跳跃的边界; catch负责处理捕获来的异常(包括继续抛掷异常)。 所抛掷的异常对象并非建在函数栈上,而是建在专用的异常栈上,故可以跨越函数而传递给上层, 每个catch()相当于一段函数代码; 每个throw则相当于一个函数调用; 每个try块至少跟一个catch(); 一个程序可设置个数不定的try 、throw 和 catch。它们只有逻辑上的呼应,而无数量上的对应关系,且不受所在函数模块限制; 异常抛掷点往往距异常捕获点很远,它们可以不在同层模块中; 甚至有的throw我们看不到在哪,实际上在我们所调用的系统函数中,在标准库中; 程序中try块可以并列、可以嵌套; 由于异常处理机制是按类型匹配的,因此catch的参数可以没有参数名,除非你非要使用参数。 C++的异常处理机制有何特色? C对出错的处理是将所有错误予以编码(返回码),一码一错。程序员编程时,通过在主调函数中检查出现的返回码,给与相应的处理。这种方法繁琐又不规范。 C++则是将形形色色的错误归结抽象为“类型错”,统统交给throw抛掷;将出错处理统一为catch 调用。这就为程序员编程制定了统一的规范,也就是运行协议。 “异常处理”实际是个动态概念。其处理机制是靠类型匹配,这恰是运行时才能发生的事。 C对出错处理的返回码机制 ,与C++的异常处理机制有何不同? 1。C将正常逻辑与异常逻辑混在一起。每个函数调用后都要用正常逻辑(如if)加以判断,以过滤出异常。这样使子函数的错误扩散到了其所有的调用者中,形成了一个混杂的怪异链。 2。增加了用于处理很少出现的特殊情况的运行费用。尤其对于C++,其成员函数通常只有几行代码,但函数很多,若每个函数都使用返回码技术,则臃肿不堪。 3。类中还有构造、拷贝构造等无返回值的函数,它们出错处理的权力不应被剥夺。 4。返回码靠的是预定的数字代号来传递信息,所能携带的信息量少且呆板,远少于抛掷的对象所携带的信息量。 异常处理机制的图示 异常处理的实现机制 若有异常则通过throw创建一个异常对象并抛掷。 将可能抛出异常的程序段嵌在try块之中。按正常的顺序执行到达try语句,然后执行try块内的保护段。 如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。 catch子句按其

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档