




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程12022年2月23日4时37分面向对象程序设计与Visual C+6.0教程2 异常处理的任务与思想异常处理的任务与思想 异常处理的实现异常处理的实现 异常处理的应用异常处理的应用 异常处理中的构造与析构异常处理中的构造与析构 C+标准异常类标准异常类2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程3 软件不仅要保证能正确完成软件不仅要保证能正确完成任务任务,还应当具,还应当具有良好的有良好的容错性容错性。 容错性指软件不仅在正确操作的条件下能正容错性指软件不仅在正确操作的条件下能正确运行
2、,而且当环境异常或不当使用时,依确运行,而且当环境异常或不当使用时,依然能合理处理运行过程中的出现的各种异常,然能合理处理运行过程中的出现的各种异常,而不会产生各种意想不到的后果。而不会产生各种意想不到的后果。 程序中的各种异常通过分析完全可以预料程序中的各种异常通过分析完全可以预料 。 根据异常的不同情况进行对异常进行处理,根据异常的不同情况进行对异常进行处理,如给出提示信息、允许用户排除环境错误等如给出提示信息、允许用户排除环境错误等都是异常处理的基本任务。都是异常处理的基本任务。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程4传统程序设计方法中,通常采用系
3、统提传统程序设计方法中,通常采用系统提供的中断函数或指令供的中断函数或指令 。 当被调用函数发生异常或产生错误时,当被调用函数发生异常或产生错误时,返回一个特定的值,以便调用函数检测。返回一个特定的值,以便调用函数检测。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程5 函数原型/指令 功 能 头文件void abort()中断程序执行,返回主C+窗口 stdlib.hvoid assert(表达式)若表达式的值为false则中断程序执行,并显示中断所在的文件和所在行号 assert.hvoid exit(状态)中断程序执行,返回退出代码(状态值) stdlib.
4、hreturn 表达式终止函数执行,返回表达式的值 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程6 在大型软件中,由于函数之间具有各自明确的分在大型软件中,由于函数之间具有各自明确的分工并可能存在调用关系,发生错误的函数可能不工并可能存在调用关系,发生错误的函数可能不便于或不具备处理错误的条件。便于或不具备处理错误的条件。 C+异常处理机制的基本思想是将异常检测与异异常处理机制的基本思想是将异常检测与异常处理分离。产生异常的函数不一定需要具备异常处理分离。产生异常的函数不一定需要具备异常处理的能力,当一个函数发生异常时,它抛出常处理的能力,当一个函数发生异常时,
5、它抛出所发生的异常或错误,由调用者捕获或处理异常,所发生的异常或错误,由调用者捕获或处理异常,若上层调用函数仍不便于处理异常,还可以进一若上层调用函数仍不便于处理异常,还可以进一步抛出异常,按调用层次关系传递给更上一层处步抛出异常,按调用层次关系传递给更上一层处理。理。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程7C+语言提供了对异常处理机制的内部支持由try、throw和catch语句提供了C+用于实现异常处理的机制。在异常处理机制的支持下,可以更合理、更有效的处理程序运行过程中存在的各种异常现象。 2022年2月23日4时37分面向对象程序设计与Visua
6、l C+6.0教程8 try-throw-catch是C+异常处理机制的实现语句;程序中可能产生异常的部分应包含于try块之中;异常由紧随其后的catch语句捕获和处理; throw语句的作用是抛出异常。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程9 try 语句;语句; catch (类型类型1,参数,参数1) 与类型与类型1相关的异常处理语句;相关的异常处理语句;catch (类型类型2,参数,参数2) 与类型与类型2相关的异常处理语句;相关的异常处理语句; catch (类型类型n,参数,参数n) 与类型与类型n相关的异常处理语句;相关的异常处理语句;
7、2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程10throw表达式的应用表达式的应用 throw 表达式;表达式; throw表达式使用形式 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程11 try try语句块实际上是程序代码的保护段,表明语句块实际上是程序代码的保护段,表明该程序段在执行过程中可能会产生异常或出现错该程序段在执行过程中可能会产生异常或出现错误;误;若预料某段程序代码或某个函数可能发生异常若预料某段程序代码或某个函数可能发生异常或错误,就应当将之置于或错误,就应当将之置于trytry语句块之内;语句块之内;一旦该代
8、码段或函数在调用过程中产生了异常一旦该代码段或函数在调用过程中产生了异常情况,情况,throwthrow语句将抛出这个异常,并通过语句将抛出这个异常,并通过throwthrow之后的表达式返回一个值;之后的表达式返回一个值; 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程12当函数出现了自己不能处理的异常,就可以使用“throw 表达式”将异常抛出; throw之后的“表达式”表示异常类型; throw语句表达式的值不能用来区分不同异常;当程序将要抛出多个异常,应该用不同类型类型的表达式值相互区别;区别; 2022年2月23日4时37分面向对象程序设计与Visua
9、l C+6.0教程13在一个try语句块内,异常处理程序将按照它出现的位置先后顺序进行检查。若找到一个匹配的异常类型,后面的异常处理都将被忽略;如果异常类型声明是一个省略号(),则表示catch语句可以处理任何类型的异常;类型为省略号的catch处理程序必须是try块的最后一段处理程序。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程14 通过正常的执行顺序直到try语句,然后执行try块内的保护段。 若保护段在执行期间没有产生异常,则try语句块后的catch块不会被执行,程序从最后一个catch语句块后面的语句继续执行。 2022年2月23日4时37分面向对象
10、程序设计与Visual C+6.0教程15 若保护段在执行期间或保护段调用的任何函数中(直接或间接的调用)有异常抛出,则从通过throw操作数创建的对象中创建一个异常对象(可能包含一个复制构造函数)。然后寻找catch语句块或一个能处理任何类型异常的catch处理块。catch语句块按其出现的顺序被检查,如果没有匹配的catch处理块,则继续检查下一个动态封闭的try块,直到最外层的封闭try块被检查完。2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程16 若没有匹配的catch处理块,则terminate函数将被自动调用,而terminate函数的默认功能是调用a
11、bort函数终止程序。若有匹配的catch处理块,如果它通过值进行捕获,则其形参通过复制异常对象进行初始化。如果它通过引用进行捕获,则参量被初始化为指向异常对象。在形参被初始化之后,对那些在与catch处理器相对应的try块开始和异常抛出点之间创建、但尚未析构的所有自动对象进行析构,然后执行catch处理程序。2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程17 C+程序设计中经常发生函数调用,在调用函数时除需要了解函数参数值和返回值类型之外,当函数有异常抛出时,还需要知道函数抛出异常的方式,以方便调用函数(主调函数)对异常进行处理 2022年2月23日4时37分面
12、向对象程序设计与Visual C+6.0教程181.指定异常类型指定异常类型类型类型 函数名函数名(参数表参数表) throw(A1, A2, An); 函数原型声明表明可以抛出的异常类型为A1, A2, An及这些类型的子类型异常。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程192. 抛出任意类型异常抛出任意类型异常类型类型 函数名函数名(参数表参数表); 函数原型没有throw的说明,该函数可以抛出任意类型的异常。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程203. 不抛出异常不抛出异常类型类型 函数名函数名(参数表参数表
13、) throw();throw之后是一个空表,该函数原型声明表示该函数不抛出任何类型的异常。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程21 C+异常处理机制不仅能处理各种不同类型的异常,而且能处理构造函数异常,即具有为抛出异常前构造的所有局部对象自动调用析构函数的能力。 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程22 C+标准库提供了包括exception类在内的9个标准异常类 exception类是异常类的基类,该类的成员函数都包含一个没有指定异常列表的throw()。 : 2022年2月23日4时37分面向对象程序设计与
14、Visual C+6.0教程23class exceptionpublic: exception() throw(); exception(const exception &rhs) throw(); exception & operator=(const exception & rhs) throw(); virtual exception() throw() virtual const char* what() const throw(); 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程24 异常类exception中含有成员函数what(),该函数可以被exception类及该类的其他派生类重载,用于返回一个描述异常的字符串常量。 exception中含有成员函数中含有成员函数 2022年2月23日4时37分面向对象程序设计与Visual C+6.0教程25类描 述domain_error处理运行时的域异常inval
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全生产试题及答案文库
- 智能数控机床升级路径与效益:2025年行业创新与市场前景报告
- 安全技术防范试题及答案
- 食品工业技术革新:2025年传统生产技术改造与市场拓展报告
- 周恩来人物介绍
- 周围环境与心理健康课件
- 员工试用期管理课件
- 年终护理安全总结
- 中国制造英语课件图片
- 留置导尿管的应用与护理
- 江苏省盐城市2023年七年级下册《数学》期末试卷与参考答案
- 安徽省安庆市铜陵市池州市2023-2024学年高二下学期7月三市联合期末检测数学试题2
- 新教科版小学科学六年级上册全册教案(2022年春修订)
- 外研版初中英语1-6册单词表
- 七年级数学下册 专题 不等式(组)中新定义运算&程序性问题(解析版)
- 药物相互作用
- 电源模块及板卡课件讲解
- 2024-2025学年人教版高一物理下册暑假练习试题及答案
- 2024年高考真题和模拟题物理分类汇编专题08 电场(原卷版)
- 人教版PEP五年级下册英语作文
- 房地产开发股东权益维护
评论
0/150
提交评论