- 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章 C++异常处理 本节主要内容 C++异常处理概述 异常处理的传统方法 异常处理的实现 标准异常 异常程序设计规 10.1 C++异常处理概述 面向对象编程,是一门深不见底的学问。它有许多技术细节需要在 学习中补充。人们尝到了抽象编程的甜头,就想千方百计地完善它。可是,在抽象作用中,明摆着模块的一层层相互作用,当模块不能正常运作时,现场一般是没有能力恢复的,应该尽可能块地返回到想要知道处理结果的模块,而且该模块具备对出错地方进行处理的能力。然而,出现错误和错误处理相隔遥远,回馈途中将饱受函数机制的繁琐手续,可函数机制却仍心安理得地按固有的节奏在冷冷地低吟。 让一种新的机制来满足程序运行中的结构跳跃吧,它就是异常机制。异常机制相对独立,与函数机制谈不上相互制约,但绝对谈得上相互补充。 我们对异常似乎充满了厚望,希望它能实质性地帮助面向对象编程,解决彼此独立的程序世界中,更融洽地相处的问题。没想到,它不但能胜任这个职责,而且还给了我们另一种过程控制的模式,令我们惊喜。 10.2 异常处理的传统方法 异常的概念 在程序运行时,会出现各种各样的情况,有些是非预料的异常情况。程序员会采取各种方法来检测运行时的错误,以保证程序的健壮性。当程序运行中发生某些异常情况时,程序检测到的错误有时由用户来考虑对这些出错情况进一步作什么处理。例如,编写一个通用子程序库的程序员,当他编写的子程序在运行中检测到发生异常情况时,一般来说不会考虑对这些出错情况作进一步的处理,而是由该子程序的用户来进行处理。对于这样的情况,传统的程序设计语言通常采取设置出错代码的方式来处理。 异常处理机制的引入使上述的情况得到了根本性的改变。当程序检测到发生某种异常情况时,抛出可由处理程序捕获的异常情况,由异常处理程序对错误作进一步的处理。 C++语言中可以使用的异常处理机制有两种,一种是基于C语言的结构化异常,另一种是C++异常。大部分C语言编译器并不支持异常处理机制,例如Borland C++ 3.1不支持异常处理机制,本章介绍的异常处理方法可以在微软的Visual C++和Borland C++4.0以上版本或C++ Builder中使用。 10.3 异常处理的实现 进入异常处理 正如你所见,传统C的错误处理方法并不适合C++,C++的一个设计目标就是让用C++进行大规模软件开发比C更好更安全。 C+ +的设计者们已经意识到缺乏合适的错误处理机制使得实现这一目标相当的困难。他们试图寻找一种完全摆脱C的错误处理缺陷的解决方案。其中的一种想法就是建立在当异常被触发的时候程序自动把控制权传递给系统。机制必须简单,并且它能够使程序员从不断的检查一个全局标记或者返回值的苦差事中解脱出来。另外,它还必须保证异常处理程序能够自动获得异常信息。最终它还要确保当一个异常没有在本地处理的时候,本地对象能够被适当的销毁,并且把它所持有的资源释放。 异常处理机制的实现被证明是一种挑战。第一个C++编译器,cfront,在UNIX环境下运行。和许多UNIX编译器一样,它首先是作为一个翻译器把C++代码转换成C,接着再编译C代码。Cfront 4.0计划引入异常处理,然而,异常处理机制的实现是如此的复杂,以至于cfront 4.0的开发团队在用了一年时间设计它之后完全的放弃了这个项目。Cfront 4.0再也没有出台。然而,异常处理却成为了标准C++的有机组成部分。后来出现的一些编译器都支持了它。在接下来的部分里将会解释为什么在cfront 以及任何编译器下实现异常处理是如此的困难。 异常处理的实现 实现异常处理所面临的挑战 实现异常处理所遇到的困难主要来自于以下几个因素: 第一,实现必须保证对于某一异常的合适的handler被找到。 第二,异常对象必须是多态的;这样,当实现无法通过派生类对象定位handler的时候可以考虑基类的handler。这种需要表明必须引入运行期类型检测。然而那时C++还没有任何运行期类型检测的能力。因此这种能力必须首先被实现。 作为一个附加的复杂性,实现必须能够调用所有局部对象的析构函数。这个过程被称为stack unwinding 。因为早期的C++编译器首先要把C++源文件转换为纯C,然后再把C代码编译成机器码。异常处理的实现者们不得不用C来实现运行期类型鉴别和stack unwinding。幸运的是,这些障碍已经被克服。 应用异常处理 异常处理是一种把控制权从异常发生的地点转移到一个匹配的handler的机制。异常是内建数据类
您可能关注的文档
最近下载
- 日语入门第一课(课件).ppt VIP
- 心内科进修汇报ppt.pptx
- 2014年10月自考《英语一》讲义-Unit-11-(含课文、生词表、课后练习及答案).doc VIP
- 7.2各民族谁也离不开谁教学设计.docx VIP
- 七年级生物上册 第二单元 第二章 第四节 单细胞生物教案课件 .ppt VIP
- 《条形统计图》教学设计.docx VIP
- 2014年10月自考《英语一》讲义-Unit-09-(含课文、生词表、课后练习及答案).doc VIP
- 部编版语文六年级上册夏天里的成长 第2课时-优课件.ppt VIP
- 浙江省台州市玉环市2023-2024学年六年级上学期期末科学试卷.docx VIP
- Python金融数据分析与应用课件 第5章 数据建模:有监督学习.pptx VIP
文档评论(0)