- 1、本文档共57页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c程序设计呃课件(第5章)
第5章 异常处理 本章学习重点掌握内容: 异常的概念、异常的产生 异常的处理机制 throw、try和catch的用法 捕捉所有的异常 异常信号的传递方式 标准C++库的异常类 第5章 异常处理 5.1 异常的概念 5.2 异常处理机制 5.3 没有被捕捉的异常 5.4 catch(...)使用 5.5 用类的对象传递异常 5.6 标准C++库中的异常类 5.7 综合应用实例 5.1 异常的概念 5.1.1 异常的概念 程序运行过程中,由于环境变化、用户操作失误以及其它方面的原因而产生的运行时不正常的情况,它要求程序立即进行处理,否则将会引起程序错误甚至崩溃的现象。 常见的异常有:空闲内存耗尽、请求打开不存在的文件、被0除、打印机未打开、数组越界访问等。 5.1.2 异常的产生 C++程序是由一些相互分离的模块组成的,程序中出现错误和解决出现的错误就会分成两个部分: (1)某个模块A出现错误,但它并没有能力在模块A内解决这个错误,因此它就给出关于这个错误的报告。 (2)某个模块B能够检测到模块A发出的错误报告,并处理这个错误,使出现错误造成的损失减到最小。 5.2 异常处理机制 5.2.1 基本概念 1.抛出异常 如果程序发生异常情况,而在当前的上下文环境中获取不到处理这个异常的足够信息,程序将创建一个包含出错信息的对象并将该对象抛出当前上下文环境,将错误信息发送到更大的上下文环境中,这个过程称为抛出(throw)异常。 5.2.1 基本概念 2.捕捉异常 对于一个抛出的异常,如果某一个模块能够(或想要)处理这个异常,它就可以获得程序的控制权处理该异常,这个过程称为捕捉(catch)异常。 3.处理异常 当某个catch块捕捉到异常后,它就根据事先制定的策略对异常进行处理,这就是处理异常。在C++中,只有catch块能够捕获异常并进行处理,因此catch块又称为异常处理器。 5.2.1 基本概念 4.C++的异常处理机制 C++的异常处理机制就是将抛出异常与捕捉异常、处理异常分离开来。抛出异常的模块并不负责异常的处理,它只是报告某个地方存在错误,这个报告可以帮助异常处理器解决这个错误。而异常处理器则根据抛出异常模块的报告来处理异常,如果没有模块抛出异常,就不会有异常的处理。 5.2.2 throw语句 抛出异常的语法格式如下: throw 表达式 这里,throw后的表达式表示异常的类型,它可以是一个变量或一个对象。throw语句在语法上与return语句相似。下面是两条throw语句的例子。 throw 1; throw ( “出现异常”); 异常抛出后,程序的控制权就从异常抛出的地方交出,由编译器寻找匹配的异常处理器进行相应的处理。 5.2.3 try块 try块的语法格式如下: try { 复合语句 } try块必须包围能够抛出异常的语句。它提示编译器到那里查找异常处理器,没有跟在try块后的catch块是没有用的。 try块可以包含任何C++语句,甚至包含整个函数。 5.2.4 catch块 catch块的语法格式如下。 catch(异常类型声明) { 异常处理语句 } catch(异常类型声明) { 异常处理语句 } …… 5.2.4 catch块 catch 后括号中的异常类型声明可以是一个类型或一个对象声明,后边一对“{}”括住的是一组复合语句。一个catch块相当于一个以类型为单一参数的函数。 catch块必须直接放在try块之后。catch语句与switch语句不同,它不需要在每个case语句后加入break用以中断后面程序的执行。 一个catch 块引入一个局部域,在catch块内声明的变量不能在catch 块外引用。 【例5.2】局部域声明的变量不能被局部域外引用例题。 #include iostream.h void main() { try { //一段可能引起异常的代码 throw (出现异常!); } catch (char* message) { int y = 1; cout处理了char*类型的异常endl; } coutyendl; //编译错误,变量y未定义 } 5.2.5 异常处理模式 C++的异常处理有两种基本模式: 1.终止模式 异常抛出后,捕捉异常并退出导致异常的子程序或子系统,
文档评论(0)