- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北京林业大学 软件教研室 第12章 异常处理 本章主要内容 (1)理解异常处理的概念和意义。 (2)掌握异常处理的执行过程和定义方法。 (3)掌握限制异常的定义方法。 (4)理解和掌握重抛异常的执行过程和定义方法。 (5)理解异常处理中对象析构的执行过程。 12.1 异常的概念 异常(Exception)是一种不常见或是不可预见的情况,经常导致中断正常的程序流。 C++中提供了一定的异常处理机制,例如数组范围的检查等。 一些可能产生异常的操作包括: 数值越界 文件操作 内存分配 Windows资源 实时生成的对象与窗体 硬件和操作系统产生的冲突等等。 12.2 C++异常处理机制 C++异常处理依赖3个关键字:try、catch和throw。 try模块中包含的是监测异常情况的程序语句,若try模块中出现异常,该异常就会被抛出(利用throw语句); 利用catch可以捕获并处理异常; 异常处理机制将异常的检测和处理分离,提高了程序的可读性。 抛出异常(也叫唤起异常)是指不常见的或是不可预见的情况的报告。 组件成员函数、实时运行库子程序、表达式和硬件错误,甚至给一组件属性赋值都会产生潜在的异常。 应用程序也能在检测特殊操作的情况时产生异常。 使用throw语句可以抛出一个异常。 异常可以是一个值或是程序中任何合法的数据类型的变量。 捕捉异常是指通过数据类型匹配,被抛出的异常会被函数调用链中某个调用者捕捉到。 一般是按照调用链往回进行搜索,它会被能处理该异常的第一个函数捕捉到。 异常处理是指解决产生异常事件的代码。 这种代码应该能够使系统恢复到一稳定状态,使得程序能够得以继续正常的运行。 这段代码通常紧跟在try代码块后,并以catch打头。 在catch语句后面的圆括号中可包含数据类型声明,这一点与函数定义时的参数声明类似 。 如果一个异常没有被调用链中的任何函数捕捉到,那么在main( )函数(因为main函数是调用链中的最后一级)捕捉该异常失败后,按照默认,该程序就会自动调用abort( )函数来终止。 12.2.1 异常处理的语法 任何需要检测异常的语句都必须在try语句块中执行,异常必须有紧跟着try语句块后面的catch语句来捕获并处理。 throw语句的一般形式如下所示: throw 表达式; try和catch语句的一般形式如下所示: try{ //try语句块 } catch(类型1 [变量1]) { //针对类型1的异常处理语句块 } catch (类型2 [变量2]){ //针对类型2的异常处理语句块 } … catch (类型N [变量N]){ //针对类型N的异常处理语句块 } throw语句产生由表达式指定的异常。如果想捕获该异常,throw语句必须要包含在try语句块中,或者包含在try语句块调用的函数中。 try语句块可以包含函数中的几行语句,也可以把整个函数封装起来。 当异常被抛出后,catch语句将依次被检查,由相应的catch语句将捕获并处理这个异常。与try语句块相关的catch语句可以有多个,最终使用哪个catch语句取决于异常的类型 【例12-1】除零异常。 12.2.2 使用多条catch语句 一个try语句可以有多条catch语句与之对应,每一个catch语句必须捕获一种不同类型的异常。 catch语句出现顺序很重要,因为在一个try语句块中,异常处理程序是按照它出现的顺序被检查的。 只要找到一个匹配的异常类型,后面的异常处理都将被忽略。 【例12-2】捕获三种类型异常。 12.2.3 捕获所有类型的异常 如果我们想捕获所有异常,而不是某一种类型的异常,可以采用catch(…)语句来实现。 【例12-3】捕获所有异常(一条catch语句)。 catch(…)语句通常作为一组catch语句的最后一条语句,可以捕获所有前面catch语句没有定义的其它类型的异常。 【例12-4】捕获所有异常(多条catch语句)。 如果不想显式地处理异常,利用catch(…)语句是一种捕获所有异常的好办法,防止由于某个未处理的异常而引起程序异常终止。 12.3 限制异常与重抛异常 12.3.1 限制异常 可以限制函数抛出的异常类型。 为实现限制异常,可以在函数定义中添加一个throw子句: 返回类型 函数名(参数列表) throw(类型列表); 只有包含在用逗号分隔的类型列表中的数据类型可以被函数抛出。 如果抛出任何其他类型的表达式,将导致程序异常终止。 例如: void f(char i) throw ( T1, T2, T3); 该函数指明了f()可以引发类型为T1、T2和T3的异常。 注意: (1)如果不希望函数抛出任何异常,
您可能关注的文档
- 面向对象程序设计(C++)( 第二版) 课件 第5章 函数.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第6章 类与对象.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第7章 继承与派生.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第8章 多态性和虚函数.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第9章 模板和异常处理.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第10章 文件的输入输出.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第11章 Visual C++编程基础.ppt
- 面向对象程序设计(C++)( 第二版) 课件 第12章 MFC应用程序实例.ppt
- 面向对象程序设计C++教程 教学课件 作者 于帆 赵妮 闫谦时 c++常用函数所在头文件一览.doc
- 面向对象程序设计及C++ 第2版 教学课件 作者 朱立华 俞琼 第1章_面向对象的程序设计及C++概述new.ppt
- 面向对象的程序设计语言——C++ 第二版 教学课件 作者 陈志泊习题答案 16110 面向对象的程序设计语言——C++(第二版)-习题参考答案.doc
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第2章.ppt
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第3章.ppt
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第4章.ppt
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第5章.ppt
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第6章.ppt
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第7章.ppt
- 面向对象的程序设计语言——C++ 教学课件 作者 陈志泊 王春玲 第8章.ppt
- 面向对象技术及UML教程教学课件 作者 李磊 王养廷 第1章 面向对象技术概述.ppt
- 面向对象技术及UML教程教学课件 作者 李磊 王养廷 第3章 UML概述.ppt
文档评论(0)