C++程序设计-北京林业大学12-第12章 异常处理

上传人:工**** 文档编号:587924140 上传时间:2024-09-06 格式:PPT 页数:14 大小:71.50KB
返回 下载 相关 举报
C++程序设计-北京林业大学12-第12章 异常处理_第1页
第1页 / 共14页
C++程序设计-北京林业大学12-第12章 异常处理_第2页
第2页 / 共14页
C++程序设计-北京林业大学12-第12章 异常处理_第3页
第3页 / 共14页
C++程序设计-北京林业大学12-第12章 异常处理_第4页
第4页 / 共14页
C++程序设计-北京林业大学12-第12章 异常处理_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《C++程序设计-北京林业大学12-第12章 异常处理》由会员分享,可在线阅读,更多相关《C++程序设计-北京林业大学12-第12章 异常处理(14页珍藏版)》请在金锄头文库上搜索。

1、第十二章第十二章异常处理12.1 异常的概念异常的概念l异常(Exception)是一种不常见或是不可预见的情况,经常导致中断正常的程序流。lC+中提供了一定的异常处理机制,例如数组范围的检查等。l一些可能产生异常的操作包括:数值越界数值越界文件操作文件操作内存分配内存分配Windows资源资源实时生成的对象与窗体实时生成的对象与窗体硬件和操作系统产生的冲突等等。硬件和操作系统产生的冲突等等。 2北京林业大学北京林业大学 软件教研室软件教研室12.2 C+异常处理机制异常处理机制lC+异常处理依赖3个关键字:try、catch和throw。try模块中包含的是监测异常情况的程序语句,模块中包含

2、的是监测异常情况的程序语句,若若try模块中出现异常,该异常就会被抛出模块中出现异常,该异常就会被抛出(利用(利用throw语句)语句);利用利用catch可以捕获并处理异常可以捕获并处理异常;l异常处理机制将异常的检测检测和处理处理分离,提高了程序的可读性。3北京林业大学北京林业大学 软件教研室软件教研室l异常可以是一个值或是程序中任何合法的数据类型的变量。l捕捉异常是指通过数据类型匹配,被抛出的异常会被函数调用链中某个调用者捕捉到。l一般是按照调用链往回进行搜索,它会被能处理该异常的第一个函数捕捉到。l异常处理是指解决产生异常事件的代码。l这种代码应该能够使系统恢复到一稳定状态,使得程序能

3、够得以继续正常的运行。l这段代码通常紧跟在try代码块后,并以catch打头。l在catch语句后面的圆括号中可包含数据类型声明,这一点与函数定义时的参数声明类似 。4北京林业大学北京林业大学 软件教研室软件教研室l如果一个异常没有被调用链中的任何函数捕捉到,那么在main( )函数(因为main函数是调用链中的最后一级)捕捉该异常失败后,按照默认,该程序就会自动调用abort( )函数来终止。 5北京林业大学北京林业大学 软件教研室软件教研室12.2.1 异常处理的语法异常处理的语法l任何需要检测异常的语句都必须在try语句块中执行,异常必须有紧跟着try语句块后面的catch语句来捕获并处

4、理。lthrow语句的一般形式如下所示:throw ;6北京林业大学北京林业大学 软件教研室软件教研室ltry和catch语句的一般形式如下所示:try/try语句块语句块catch(类型类型1 变量变量1) /针对类型针对类型1的异常处理语句块的异常处理语句块catch (类型类型2 变量变量2)/针对类型针对类型2的异常处理语句块的异常处理语句块catch (类型类型N 变量变量N)/针对类型针对类型N的异常处理语句块的异常处理语句块 7北京林业大学北京林业大学 软件教研室软件教研室throw语句产生由语句产生由指定的异常。如果指定的异常。如果想捕获该异常,想捕获该异常,throw语句必须

5、要包含在语句必须要包含在try语语句块中,或者包含在句块中,或者包含在try语句块调用的函数中。语句块调用的函数中。 try语句块可以包含函数中的几行语句,也可以语句块可以包含函数中的几行语句,也可以把整个函数封装起来。把整个函数封装起来。 当异常被抛出后,当异常被抛出后,catch语句将依次被检查,由语句将依次被检查,由相应的相应的catch语句将捕获并处理这个异常。与语句将捕获并处理这个异常。与try语句块相关的语句块相关的catch语句可以有多个,最终使用语句可以有多个,最终使用哪个哪个catch语句取决于异常的类型语句取决于异常的类型 l【例12-1】除零异常。8北京林业大学北京林业大

6、学 软件教研室软件教研室12.2.2 使用多条使用多条catch语句语句 l一个try语句可以有多条catch语句与之对应,每一个catch语句必须捕获一种不同类型的异常。lcatch语句出现顺序很重要,因为在一个try语句块中,异常处理程序是按照它出现的顺序被检查的。l只要找到一个匹配的异常类型,后面的异常处理都将被忽略。l【例12-2】捕获3种类型异常。9北京林业大学北京林业大学 软件教研室软件教研室12.2.3 捕获所有类型的异常捕获所有类型的异常l如果我们想捕获所有异常,而不是某一种类型的异如果我们想捕获所有异常,而不是某一种类型的异常,可以采用常,可以采用catch()语句来实现。语

7、句来实现。l【例例12-3】捕获所有异常(一条捕获所有异常(一条catch语句)。语句)。catch()语句通常作为一组语句通常作为一组catch语句的语句的最后一条语句最后一条语句,可以捕获所有前面可以捕获所有前面catch语句没有定义的其它类型的异语句没有定义的其它类型的异常。常。l【例例12-4】捕获所有异常(多条捕获所有异常(多条catch语句)。语句)。如果不想显式地处理异常,利用如果不想显式地处理异常,利用catch()语句是一种语句是一种捕获所有异常的好办法,防止由于某个未处理的异常捕获所有异常的好办法,防止由于某个未处理的异常而引起程序异常终止。而引起程序异常终止。10北京林业

8、大学北京林业大学 软件教研室软件教研室12.3 限制异常与重抛异常限制异常与重抛异常 12.3.1 限制异常l可以限制函数抛出的异常类型。l为实现限制异常,可以在函数定义中添加一个throw子句: 返回类型返回类型 函数名(参数列表)函数名(参数列表) throw(类型列表);(类型列表);l只有包含在用逗号分隔的类型列表中的数据类型可以被函数抛出。l如果抛出任何其他类型的表达式,将导致程序异常终止。 11北京林业大学北京林业大学 软件教研室软件教研室例如:void f(char i) throw ( T1, T2, T3);该函数指明了该函数指明了f()可以引发类型为可以引发类型为T1、T2

9、和和T3的异的异常。常。l注意:(1)如果不希望函数抛出任何异常,则函数原型)如果不希望函数抛出任何异常,则函数原型的的throw部分只是一个空表。例如:部分只是一个空表。例如: void f(int i) throw ( );(2)如果一个函数的原型中没有异常说明的)如果一个函数的原型中没有异常说明的throw部分,则该函数可引发任意类型的异常。部分,则该函数可引发任意类型的异常。12北京林业大学北京林业大学 软件教研室软件教研室12.3.2 重抛异常重抛异常l重抛异常时只能从catch语句块中(或从调用函数中)再次抛出异常,该异常将不再被同一个catch语句所捕获,它将传递给外部的catc

10、h语句。l【例12-5】重抛异常。13北京林业大学北京林业大学 软件教研室软件教研室小结小结l(1)C+语言中异常处理的基本思想将异常的检测和处理分离。当在一个函数体中检测到异常条件存在,但无法确定相应的处理方法时,将引发一个异常,并由函数的直接或间接调用检测并处理这个异常。l(2)异常处理利用try、catch和throw三个关键字实现。try模块中包含的是监测异常情况的程序语句,若try模块中出现异常,该异常就会被抛出(利用throw),利用catch可以捕获并处理异常。l(3)可以通过关键字throw在函数声明限制函数处理异常的类型。函数可以处理特定类型的异常,可以处理所有类型的异常,也可以限制函数不处理任何类型的异常。 14北京林业大学北京林业大学 软件教研室软件教研室

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号