版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十一章 异常处理C+开发实例教程刘畅主编 电子工业出版社本章学习内容异常处理机制的概述;异常处理机制的实现。目 录第三十二讲 异常处理基础知识 本章小结 结 束第三十二讲 异常处理基础知识一、异常处理机制 二、异常类的定义 练一练返回本章目录一、异常处理机制 【实例11-1】阅读下面的程序片断,分析程序运行时可能出现的错误。 点击打开【实例11-1】源程序x11_1_1.cpp 程序分析: 程序从标准输入设备键盘读数据x和y后执行除法运算,并显示运算结果。分析一下可能导致这个程序出现错误的情况:如果输入y=0,即除法运算的除数为0,此时执行除法x/y就会导致错误,程序被终止。当输入y=0时的
2、错误信息为:返回本讲目录因此,在编写程序时,在可能出现错误的代码处,要加入错误处理代码段,避免程序继续执行而导致严重后果。除法运算时为避免错误而采用的典型方法如下:点击打开【实例11-1】源程序x11_1_2.cpp 程序运行结果如下(当输入y=0时): 当出现除数为0错误时,由于程序中进行了判断并发现了这个错误,所以没有执行系统的终止程序,而是执行程序中的错误处理代码。返回本讲目录事实上,在C+系统中,还提供了异常处理机制来管理程序运行期间出现的错误,从而形成结构化的异常处理模式。 点击打开【实例11-1】源程序x11_1_3.cpp 程序运行结果如下(当输入y=0时):返回本讲目录1异常处
3、理概述 程序运行时,可能因为发生了某种错误而终止,这些错误可以分为不可预料的逻辑错误和可以预料的运行错误。为处理可预料的运行错误,典型的方法是考虑到可能出现的错误,设计当错误发生时执行专门的错误处理代码,中断程序的正常执行流程,不会因继续执行而产生严重或不可预料的后果。但是这种方法,不能区分程序中的正常处理代码与错误处理代码,不是结构化的设计方法。应用C+异常处理机制则可以显式地区别程序中的正常处理代码与错误处理代码,提高程序的可读性。 返回本讲目录2异常处理实现 【实例11-1】中使用了异常处理机制,将正常处理代码与错误处理代码区别开来,体现了C+中异常处理机制的基本思想:异常的检测与处理分
4、离。当语句被检测到错误时,将抛出一个异常,再由程序捕获并处理这个异常。这一基本思想用3个关键字实现:throw、try和catch,其作用是: try:标识程序中可能出现异常语句块的开始。 throw:抛出异常。 catch:捕获并处理相应的异常。返回本讲目录异常处理的执行过程(1)程序通过正常的顺序执行到try语句,然后执行try块内的保护段。(2)如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不被执行,程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。(3)如果在保护段执行期间或保护段调用的任何函数中(直接或间接的调用)有异常抛出,catch处理程
5、序按其在try块后出现的顺序被检查,如果找到了匹配的catch异常处理类型,就执行该段异常处理程序。(4)如果没有找到匹配的处理程序,则系统函数terminate被自动调用,其默认功能是调用abort终止程序。 返回本讲目录说明:(1)try子句后大括号中的复合语句是代码的保护段。如果预料到某段程序代码有可能发生异常,就将代码放在try子句后的复合语句中,如果这段代码运行时真的出现了异常,其中的throw就会抛出这个异常。(2)使用throw抛出异常,如果程序中要抛出多种类型的异常,应该用不同的类型来相互区别,的值不能用来区别不同的异常。(3)catch子句后大括号中的复合语句是异常处理程序,
6、捕获由throw抛出的异常。catch子句中的异常类型指明该子句能处理的异常类型,类型可以是C+中任何有效的数据类型,包括类类型。当异常被抛出后,catch子句依次被检查,若某个catch子句中的异常类型与抛出的异常类型一致,则执行该段异常处理程序。如果异常类型是catch(),则该段异常处理程序能够捕获并处理任何类型的异常,catch()必须是最后一个catch子句。 返回本讲目录3自定义的终止函数 返回本讲目录如果一个异常抛出后,系统找不到一个与该异常类型相匹配的catch子句,则自动调用预定义的运行时刻终止函数terminate,执行默认的abort程序退出程序。用户也可以定义自己的终止
7、函数。【实例11-2】阅读程序,学习编写用户自定义的终止函数。点击打开【实例11-2】源程序程序运行结果: 当打开文件操作失败抛出异常后,系统找不到一个与该异常类型(char *)相匹配的异常处理程序,则执行指定的myTerminate函数,显示如下信息: 返回本讲目录【实例11-3】阅读下面的程序,学习异常类的定义。点击打开【实例11-3】源程序本实例抛出的是一个自定义的异常类except的对象,自动调用异常类的构造函数初始化异常类数据成员;catch子句捕获并调用异常类的成员函数来输出错误信息后,调用exit(1)退出程序;若执行的过程中没有异常产生,则执行正常的除法运算,将运算结果写入到
8、打开的文件中,操作结束后要关闭打开的文件。二、异常类的定义 返回本讲目录程序运行结果如下:若打开文件操作失败,显示的错误信息为: 若打开文件操作成功,但输入了0作为除数,显示的错误信息为: 4标准C+库中的异常类 标准C+库中包含了1个异常基类和9个异常派生类,它们可以分为运行时异常和逻辑异常:(1)由异常基类exception(在头文件中定义)直接派生的类: runtime_error logic_error每个派生类又可以派生其他类。exception提供成员函数what(),在每个派生类中重定义,发出相应的错误消息。 返回本讲目录(2)logic_error类是几个标准异常类的基类,表示
9、程序逻辑中的错误,可以通过编写正确的代码来防止,派生的异常类有: length_error:长度异常,长度大于所操作对象允许的最大长度 domain_error:域异常 out_of_range_error:越界异常,数组下标值超界 invalid_argument:参数异常,向函数传入了无效参数返回本讲目录(3)runtime_error类是几个其他异常类的基类,表示程序中只能在执行时发现的错误,派生的异常类有: range_error:范围异常 overflow_error:运算上溢出异常 underflow_error:运算下溢出异常标准C+库中的这些异常并没有全部被显示使用,因为C+标
10、准库中很少发生异常,但是这些标准异常类可以为编程人员提供一些开发自己的异常类的经验。返回本讲目录5多路捕获 很多程序可能有若干不同种类的运行错误,可以使用异常处理机制,每种错误与一个类、一种数据类型或一个值相关。这样,在程序中就会出现多路捕获。 【实例11-4】阅读下面的程序,学习多路捕获的应用。 点击打开【实例11-4】源程序程序运行结果如下:返回本讲目录练一练【练习11-1】 编写一个程序,使用指针创建一个整数数组,并对数组中的元素赋值,要求采用异常处理机制,处理申请操作不成功的情况。解:使用指针创建一个整数数组,可以通过new运算符申请一块保存数组的内存单元。对于指针的动态内存分配,应在
11、分配操作结束以后,首先检查返回的地址值是否为0,以确认内存申请是否成功。只有在分配成功以后,才可以使用这个指针。返回本讲目录(1)程序分析如下: 定义一个整数指针p。 动态申请指针p所需的内存空间(假设整型数组的元素为5个),并检查申请操作是否成功。此操作要放在try块中,若指针的返回值为0,内存分配不成功,要抛出一个异常,程序不能继续执行。 使用指针p给数组赋值,并将元素值显示出来。 点击打开【练习11-1】源程序程序运行结果如下: 内存分配成功时: 若内存分配失败,执行异常处理代码后,程序终止: 返回本讲目录本 章 小 结利用C+系统的异常处理,可以捕获所有类型的异常、捕获特定类型的所有异常和捕获相关类型的所有异常,这样就可以使程序更加健壮。异常处理使程序可以捕获和处理错误,而不是任其发生和造成恶果。程序员在try块中放上出错时产生异常的代码。try块后面是一个或几个catch块。每个catch块指定捕获和处理一种异常,而且每个catch块包含一个异常处理器(异常处理程序)。返回本章目录抛出异常时,程序控制离开try块,从catch块中搜索相应异常处理器。如果异常类型与catch块中的参数类型相匹配,则执行该catch块的代码。如果找不到相应的异常处理器,则调用terminate
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《电器销售员培训》课件
- 《热泵的基础知识》课件
- 《小学人物描写》课件
- 单位管理制度范例合集职员管理十篇
- 《网络b安全b》课件
- 第3单元 中国特色社会主义道路(A卷·知识通关练)(解析版)
- 《美甲的发展史》课件
- 2014年高考语文试卷(新课标Ⅱ卷)(解析卷)
- 中国非遗文化鱼灯介绍2
- 农产品电商新篇章
- 2024-2025学年人教版七年级英语上册各单元重点句子
- 江苏省丹阳市丹阳高级中学2025届物理高一第一学期期末统考试题含解析
- 信息技术行业数据安全HSE方案
- 中华护理学会团体标准-气管切开非机械通气患者气道护理
- 四川省成都市武侯区2023-2024学年七年级上学期1月期末语文试卷
- 儿科护理安全警示教育
- 2023-2024学年九年级上学期期末试卷及答案
- 2023年江苏省普通高中信息技术学业水平考试题库试题
- (浙教2024版)科学七年级上册全册知识点(新教材)
- 善读无字之书(2023年广东中考语文试卷议论文阅读题及答案)
- 《心系国防 强国有我》 课件-2024-2025学年高一上学期开学第一课国防教育主题班会
评论
0/150
提交评论