- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c课件第十二章
第12章 异常处理 内容概览 异常处理的概念 异常处理的基本思想 异常处理的实现 异常处理的规则 异常事件的多路捕捉 异常处理机制 使用异常处理的方法 小结 12.1 异常处理的概念 在大型软件开发中,最大的问题就是错误连篇的、不稳定的代码。而在设计与实现中,最大的开销是花在测试、查找和修改错误上。 程序的错误,一种是编译错误,即语法错误。如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码。另一种是在运行时发生的错误,它分为不可预测的逻辑错误和可以预料的运行异常。 逻辑错误是由于不当的设计造成的,例如,某个排序算法的不合适,导致在边界条件下,不能正常完成排序任务。一般只有当用户做了某些出乎意料的事才会出现逻辑错误,这些错误,安静地潜伏着,连许多大型的优秀软件都不能避免。就像大战之后残留的地雷,在“一切正常“中,突然某人进入了误区,程序发生了”爆炸“。一旦发现了逻辑错误,专门为其写一段处理错误的代码,就可以避免错误的发生,比如数组下标溢出检查,这样错误就防范在先了。 运行异常,可以预料,但不能避免。它是由系统运行环境造成的。如,内存空间不足,而程序运行中提出内存分配申请时,得不到满足,就会发生异常;在硬盘上的文件被挪离,或者软盘没有放好,导致程序运行中文件打不开而发生异常;程序中发生除0的代码,导致系统除0中断;打印机未打开,调制解调器掉线等,导致程序运行中挂接这些设备失败,等等。这些错误会使程序变得脆弱。然而这些错误是能够预料的,通常加入一些预防代码便可防止这些异常的发生。 异常是一种程序定义的错误,它对程序的逻辑错误进行设防的,对运行异常加以控制。C++中,异常处理是对所能预料的运行错误进行处理的一套实现机制。 12.2 异常处理的基本思想 在大型程序中,一旦发生异常,一般是将程序立即中断运行,从而无条件释放所有资源。对于大型程序来说,运行中一旦发生异常,应该允许恢复和继续运行。恢复的过程就是把产生异常所造成的恶劣影响去掉,中间可以要涉及一系列的函数调用链的退栈,对象的析构,资源的释放等。继续运行就是异常处理之后,在紧接着异常处理的代码区域中继续运行。 在C++中,异常是指从发生问题的代码区域传递到处理问题的代码区域的一个对象。如图1所示。 发生异常的地方在函数k()中,处理异常的地方在其上层函数f()中,处理异常后,函数k()和g()都退栈,然后程序在函数f()中继续运行。如果不用异常处理机制,在程序中单纯地嵌入错误处理语句,要实现这一目的是艰难的。 异常处理的基本思想是: (1)实际的资源分配(如内存申请或文件打开)通常在程序的低层进行,如图12-1中的k()。 (2)当操作失败,无法分配内存或无法打开一个文件时,在逻辑上如何进行处理通常是在程序的高层,如图12-1中的f(),中间还可能有与用户的对话。 (3)异常为从分配资源的代码转向处理错误状态的代码提供了一种表达方式。如果还存在中间层次的函数,如图12-1中的g(),则为它们释放所分配的内存提供了机会,但这并不包括用于传递错误状态信息的代码。 可以看出,C++异常处理的目的,是在异常发生时,尽可能地减小破坏,周密地善后,而不影响其他部分程序的运行。这在大型程序中是非常必要。 12.3 异常处理的实现 使用异常处理的步骤如下: (1)定义异常(try语句块) 将那些有可能产生错误的语句框定在try块中。 (2)定义异常处理(catch语句块) 将异常处理的语句放在catch块中,以便异常处理被传递过来时就处理它。 (3)抛掷异常(throw语句) 检测是否产生异常,如果是,则抛掷异常。 12.4 异常处理的规则 以catch开始的程序块是异常处理程序,编写异常处理程序的规则是: (1)任意数量的catch分程序立即出现在try分程序之后。在try分程序出现后前,不能出现这些catch程序块。 (2)在catch行的圆括号中可包含数据类型声明,它与函数定义中参数声明起的作用相同。应该把异常处理catch块看作是函数分程序。跟在catch之后的圆括号中必须含有数据类型,捕获是利用数据类型匹配实现的。在数据类型之后放参数名是可选的。参数名使得被捕获的对象在处理程序分程序中被引用。 (3)如果一个函数抛掷一个异常,但在通往异常处理函数的调用链中找不到与之匹配的catch,则该程序通常以abort()函数调用终止。 (4)如果catch分程序执行完毕,则跟随最后catch分程序的代码(如果有的话)就被执行。 12.5 异常事件的多路捕获 多数程序可能有若干不同种类的运行错误,它们可以用异常处理机制。每种错误可与一个类、一个数据类型或一个值有关。这样,在程序中就会出现多路捕获。 12.6 异常处理机制 在处理程序和语句之间的相互作用使异常在大型应用
您可能关注的文档
最近下载
- 2025年国家电网专业技术人员考试(计算机水平)历年参考题库含答案详解(5卷).docx VIP
- I公章制作及常用的公章规格.docx VIP
- 2025年秋招:农村商业银行题目及答案.doc VIP
- 《大学生职业生涯规划与就业指导(慕课版)》全套教学课件.pptx
- 叶黄素艾草护眼贴产品技术要求标准2023年.pdf VIP
- 第一二三单元 古诗文积累默写专项练 2023-2024学年统编版语文七年级上册.docx VIP
- 老年人心理照护:老年人死亡认知教育PPT教学课件.pptx VIP
- 《氟化氢气体检测报警器校准规范》编制说明.DOC VIP
- 工程竣工测量技术方案(3篇).docx VIP
- 2025年入团考试练习试题(100题)含答案.pdf VIP
原创力文档


文档评论(0)