- 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程序设计-北京林业大学2%-第2章异常处理
北京林业大学 软件教研室 第十二章 异常处理 12.1 异常的概念 异常(Exception)是一种不常见或是不可预见的情况,经常导致中断正常的程序流。 C++中提供了一定的异常处理机制,例如数组范围的检查等。 一些可能产生异常的操作包括: 数值越界 文件操作 内存分配 Windows资源 实时生成的对象与窗体 硬件和操作系统产生的冲突等等。 12.2 C++异常处理机制 C++异常处理依赖3个关键字:try、catch和throw。 try模块中包含的是监测异常情况的程序语句,若try模块中出现异常,该异常就会被抛出(利用throw语句); 利用catch可以捕获并处理异常; 异常处理机制将异常的检测和处理分离,提高了程序的可读性。 异常可以是一个值或是程序中任何合法的数据类型的变量。 捕捉异常是指通过数据类型匹配,被抛出的异常会被函数调用链中某个调用者捕捉到。 一般是按照调用链往回进行有哪些信誉好的足球投注网站,它会被能处理该异常的第一个函数捕捉到。 异常处理是指解决产生异常事件的代码。 这种代码应该能够使系统恢复到一稳定状态,使得程序能够得以继续正常的运行。 这段代码通常紧跟在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】捕获3种类型异常。 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)如果不希望函数抛出任何异常,则函数原型的throw部分只是一个空表。例如: void f(int i) throw ( ); (2)如果一个函数的原型中没有异常说明的throw部分,则该函数可引发任意类型的异常。 12.3.2 重抛异常 重抛异常时只能从catch语句块中(或从调用函数中)再次抛出异常,该异常将不再被同一个catch语句所捕获,它将传递给外部的catch语句。 【例12-5】重抛异常。 小结 (1)C++语言中异常处理的基本思想将异常的检测和处理分离。
文档评论(0)