




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第20章 异 常 处 理,杨章伟 e-mail:,课程内容安排,错误与异常 异常处理的实现 类和结构的异常处理 异常处理机制 字符串库 小结 习题,错误与异常,在实际的应用程序设计中,不可避免地会出现程序错误和异常。因此,异常处理是每一种程序设计语言都必须包含的一个部分,C+的异常处理功能非常完善,使用户能够很快发现及捕获异常,尽快地完成程序调试。 读者可以理解,在实际程序设计中,无论用户的编码技术有多好,出现错误的可能性都很大。因此,程序都必须能处理可能出现的错误和异常。,什么是异常,简单地说,异常就是程序在运行过程中,由于使用环境的变化及用户的操作而产生的错误。例如,内存不足时,应用程序请
2、求分配内存,程序中出现了以零为除数的错误;打印机未打开,导致程序运行中挂接这些设备失败等,都会引发异常。对这些错误,应用程序如果不能进行合适的处理,将会使程序变得非常脆弱,甚至不可使用。 异常处理对于编写健壮的软件来说无疑是非常重要的,是否有完善的异常处理机制也是评价某一程序设计语言优劣的一个重要标准。,异常处理的基本思想,处理异常的基本思想是:在底层发生的问题,逐级上报,直到有能力可以处理异常的那级为止。或者说,在应用程序中,如果某个函数发现了错误并引发异常,这个函数就将该异常向上级调用者传递,请求调用者捕获该异常并处理该错误。如果调用者不能处理该错误,就继续向上级调用者传递,直到异常被捕获
3、错误被处理为止。 如果程序最终没有相应的代码处理该异常,那么该异常最后被C+系统所接受,C+系统就简单地终止程序运行。 【范例20-1】异常处理的基本思想。该范例实现当除数为零时,停止运行并给出提示信息 。,使用try/catch捕获异常,通过前面的介绍,读者已经了解到,对异常的处理之前首先需要捕获到异常。在C+中,提供了语句try/catch来捕获异常,其中,try和catch分别用于定义异常和定义异常处理。定义异常是将可能产生错误的语句放在try语句块中。其格式是: try 可能产生错误的语句 定义异常处理是将异常处理的语句放在catch语句块中,以便异常被传递来时处理。通常,异常处理是放
4、在try语句块后的由若干个catch语句组成的程序,使用throw抛出异常,抛出异常(也称为抛出异常)即检测是否产生异常,在C+中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。该语句的格式为: throw 表达式; 如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句的异常类型相匹配。由于C+使用数据类型来区分不同的异常,因此在判断异常时,throw语句中的表达式的值就没有实际意义,而表达式的类型就特别重要 【范例20-2】处理除数为
5、0的异常。该范例将上述除数为0的异常可以用try/catch语句来捕获异常,并使用throw语句来抛出异常,从而实现异常处理 。,类和结构的异常处理,C+异常处理的真正能力不仅在于它能处理各种不同类型的异常,还在于它具有在异常抛弃前为构造的所有局部对象自动调用析构函数的能力。 当在程序中找到一个匹配的catch异常处理后,如果catch()语句的异常类型声明是一个值参数,则其初始化方式是复制被抛弃的异常对象;如果catch()语句的异常类型声明是一个引用,则其初始化方式是使该引用指向异常对象。,异常处理机制,C+异常处理机制是一个用来有效地处理运行错误的非常强大且灵活的工具,它提供了更多的弹性
6、、安全性和稳固性,克服了传统方法所带来的问题。 事实上,C+中的异常处理机制是一种把控制权从异常发生的地点转移到一个匹配的处理函数或功能块的机制。其中,异常可以是内建数据类型变量,也可以是对象。一般来说,异常处理机制包括4个部分。 try语句块:即一个定义异常的语句块。 catch语句块:即一个或多个和try语句块相关的处理,它们放在catch语句块中。 throw表达式:即抛出异常语句。 异常本身。,本章主要介绍了C+中关于异常处理及其机制的内容。异常处理是所有程序设计语言都需要包含的一个部分,C+的异常处理机制主要由定义异常、定义异常处理和throw语句等组成。对于C+中处理异常的语句主要
7、包括:try语句、catch语句和throw语句等。对于不同类型的异常处理,其throw语句后的表达式类型较为重要,尤其是当处理类型为结构体时。,小结,1打开文件发生错误是经常发生的情况。设计一个程序,该程序可以处理一个处理文件时发生的异常。 【解答】该试题主要考查C+异常处理机制的应用。打开文件需要使用到文件类并创建输入输出流对象,通过调用对象的fail()成员函数判断其是否打开成功。此处需要使用到try/catch语句来进行异常的定义和捕获,其中异常定义语句写在try语句中,异常处理语句写在catch语句中。 2定义一个异常处理类,该类需能捕获错误类型并返回,在主函数中当用户输入整数1时发生异常,并调用类的成员函数进行异处理。 【解答】该试题主要考查异常处理的实现。首先在类中定义一个错误类型作为私有成员,而成员函数则是返回错误类型并对错误进行处理。在主函数中接收用户输入,当输入为整数1时通过trycatch语句捕获该异常并进行处理。,习题,习题,3分析以下程序的执行结果。 #include int Div(int x,int y) if(y=O) throw y; return x/y; int main() try cout7/3=Div(7,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度网络安全实习生实习协议范本
- 2025版绿色家居装修设计施工合同范本
- 2025版危险化学品仓储安全管理合同范本
- 二零二五年校园安全守护服务合同终止声明
- 2025版A包海南农产品品牌国际化推广合同
- 二零二五年度茶园承包与茶叶加工生产合同
- 2025年度高端家具搬运服务合同范本
- 二零二五版城市综合体安防系统整体解决方案合同
- 二零二五年度光伏发电安装工程一切险合同范本
- 二零二五年政府机关办公设备采购合作协议
- 德勤:2025“十五五”时期中国能源行业关键议题报告
- 湖北省黄冈市2024-2025学年高一下学期期末质量监测数学试卷
- 撤资合同范本:投资撤资协议书
- 医保drg付费课件培训
- 口腔护士试题及答案
- 羊水栓塞护理
- 2025至2030全球及中国帆船行业产业运行态势及投资规划深度研究报告
- 北京海淀街道社区卫生服务中心招聘笔试真题2024
- 肿瘤标志物实验室解读
- 维修人员薪酬管理制度
- 2025年湖北省中考英语试卷真题(含答案)
评论
0/150
提交评论