(10)--第10章 异常处理面向对象程序设计.pdf
-
资源ID:96640976
资源大小:458.33KB
全文页数:11页
- 资源格式: PDF
下载积分:20金币
快捷下载

会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
(10)--第10章 异常处理面向对象程序设计.pdf
第十章异常处理计算机科学与工程学院学习目标学习目标用用try、throw和和catch分别监视、指定和处理异常。分别监视、指定和处理异常。处理未捕获和未预料的异常处理未捕获和未预料的异常。理解标准异常层次结构理解标准异常层次结构。计算机科学与工程学院异常处理概述异常处理概述C+的异常处理是一种允许两个独立开发的程序组件在的异常处理是一种允许两个独立开发的程序组件在程序执行期间遇到程序不正常执行的情况程序执行期间遇到程序不正常执行的情况(称为异常称为异常)时,时,相互通信的机制。相互通信的机制。计算机科学与工程学院抛出异常抛出异常如果程序发生异常情况,而在当前的上下文环境中获取异如果程序发生异常情况,而在当前的上下文环境中获取异常处理的足够信息,可以创建一个包含出错信息的对象并常处理的足够信息,可以创建一个包含出错信息的对象并将此对象抛出当前的上下文环境,将出错信息发送到更大将此对象抛出当前的上下文环境,将出错信息发送到更大的上下文环境中,称为异常抛出。的上下文环境中,称为异常抛出。抛出异常语法抛出异常语法throw ourerror(some error happened);计算机科学与工程学院抛出异常抛出异常ourerror是一个普通的自定义类。如有异常抛出,可以是一个普通的自定义类。如有异常抛出,可以使用任意类型变量作为参数。使用任意类型变量作为参数。例如,在函数例如,在函数f()中抛出异常:中抛出异常:void f()throw int(5);计算机科学与工程学院异常捕获异常捕获如果函数内抛出一个异常如果函数内抛出一个异常(或在调用函数时抛出一个异常或在调用函数时抛出一个异常),则,则在异常抛出时系统会在异常抛出时系统会自动退出自动退出所在函数的执行。所在函数的执行。如不想在异常抛出时退出函数,可在函数内创建一个特殊块,如不想在异常抛出时退出函数,可在函数内创建一个特殊块,用于测试各种错误。用于测试各种错误。测试块作为普通作用域,由关键字测试块作为普通作用域,由关键字try引导,异常抛出后,由引导,异常抛出后,由catch引导的异常处理模块应能接受任何类型的异常。在引导的异常处理模块应能接受任何类型的异常。在try之之后,根据异常的不同情况,相应的处理方法由关键字后,根据异常的不同情况,相应的处理方法由关键字catch引引导。导。计算机科学与工程学院西安理工大学异常捕获异常捕获异常处理部分必须异常处理部分必须直接直接放在测试块之后。每一个放在测试块之后。每一个catch语句相当于以特殊类语句相当于以特殊类型为参数的函数型为参数的函数(如类型如类型type1、type2等等)。如果异常抛出给出的异常类型足以判断如何进行异常处理,则异常处理器如果异常抛出给出的异常类型足以判断如何进行异常处理,则异常处理器catch中的参数可以省略。中的参数可以省略。try/可能发生错误的代码可能发生错误的代码catch(type1 t1)/第一种类型异常处理第一种类型异常处理catch(type2 t2)/第二种类型异常处理第二种类型异常处理/其他类型异常处理其他类型异常处理计算机科学与工程学院西安理工大学异常捕获异常捕获异常处理的执行流程如下:异常处理的执行流程如下:程序进入到程序进入到try块,执行块,执行try块内的代码。块内的代码。如果在如果在try块内没有发生异常,则直接转到所有块内没有发生异常,则直接转到所有catch块后的第一条语句块后的第一条语句执行下去。执行下去。如果发生异常,则根据如果发生异常,则根据throw抛出的异常对象类型来匹配一个抛出的异常对象类型来匹配一个catch语句语句。如果找到类型匹配的如果找到类型匹配的catch语句,进行捕获,其参数被初始化为指向语句,进行捕获,其参数被初始化为指向异常对象,执行相应异常对象,执行相应catch内的语句模块;内的语句模块;如果找不到匹配类型的如果找不到匹配类型的catch语句,系统函数语句,系统函数terminate被调用,终被调用,终止程序。止程序。例例10-1 除数为除数为0的例子。的例子。计算机科学与工程学院西安理工大学未捕获异常的处理未捕获异常的处理如果任意层的异常处理器都没有捕获到异常如果任意层的异常处理器都没有捕获到异常(没有没有指定相应的指定相应的catch块块),称为,称为“未捕获异常未捕获异常”。系。系统的特殊函数统的特殊函数terminate()将被自动调用,该函将被自动调用,该函数通过调用数通过调用abort()函数来终止程序的执行。函数来终止程序的执行。例例10-2 未捕获的异常。未捕获的异常。计算机科学与工程学院西安理工大学构造函数、析构函数与异常处理构造函数、析构函数与异常处理例例10-3 构造函数中的异常。构造函数中的异常。构造函数中发生异常后,异常处理遵从以下规则:构造函数中发生异常后,异常处理遵从以下规则:如果对象有成员函数,且如果在外层对象构造完成之前有异常抛如果对象有成员函数,且如果在外层对象构造完成之前有异常抛出,则在发生异常之前,执行构造成员对象的析构函数。出,则在发生异常之前,执行构造成员对象的析构函数。如果异常发生时,对象数组被部分构造,则只调用已构造的数组如果异常发生时,对象数组被部分构造,则只调用已构造的数组元素的析构函数。元素的析构函数。异常可能跳过通常释放资源的代码,从而造成资源泄漏。解决的异常可能跳过通常释放资源的代码,从而造成资源泄漏。解决的方法是,请求资源时初始化一个局部对象,发生异常时,调用析方法是,请求资源时初始化一个局部对象,发生异常时,调用析构函数并释放资源。构函数并释放资源。要捕捉析构函数中的异常,可以将调用析构函数的函数放入要捕捉析构函数中的异常,可以将调用析构函数的函数放入try块,块,并提供相应类型的并提供相应类型的catch处理程序块。抛出对象的析构函数在异处理程序块。抛出对象的析构函数在异常处理程序执行完毕后执行。常处理程序执行完毕后执行。计算机科学与工程学院西安理工大学异常匹配异常匹配从基类可以派生各种异常类,当一个异常抛出时,从基类可以派生各种异常类,当一个异常抛出时,异常处理器会根据异常处理顺序找到异常处理器会根据异常处理顺序找到“最近最近”的的异常类型进行处理。异常类型进行处理。如果如果catch捕获了一个指向基类类型异常对象的捕获了一个指向基类类型异常对象的指针或引用,那么它也可以捕获该基类所派生的指针或引用,那么它也可以捕获该基类所派生的异常对象的指针或引用。异常对象的指针或引用。例例10-4 异常捕获顺序举例。异常捕获顺序举例。