网站大量收购独家精品文档,联系QQ:2885784924

[理学]C++程序设计课件第5章.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[理学]C程序设计课件第5章

第5章 异常处理 本章重点掌握内容: 异常的概念、异常的产生 异常的处理机制 throw、try和catch的用法 捕捉所有的异常 异常信号的传递方式 5.1 异常的概念 5.1.1 异常的概念 程序运行过程中,由于环境变化、用户操作失误以及其它方面的原因而产生的运行时不正常的情况,它要求程序立即进行处理,否则将会引起程序错误甚至崩溃的现象。 常见的异常有:空闲内存耗尽、请求打开不存在的文件、被0除、打印机未打开、数组越界访问等。 5.1.2 异常的产生 C++程序是由一些相互分离的模块组成的,程序中出现错误和解决出现的错误就会分成两个部分: (1)某个模块A出现错误,但它并没有能力在模块A内解决这个错误,因此它就给出关于这个错误的报告。 (2)某个模块B能够检测到模块A发出的错误报告,并处理这个错误,使出现错误造成的损失减到最小。 5.2异常处理机制 程序可能按编程者的意愿终止,也可能因为程序中发生了错误而终止。 程序的错误有两种,一种是编译错误,即语法错误。如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码。另一种是在运行时发生的错误,它分为不可预料的逻辑错误和可以预料的运行异常。 异常处理机制是用于管理程序运行期间错误的一种结构化方法。所谓结构化是指程序的控制不会由于产生异常而随意跳转。异常处理机制将程序中的正常处理代码与异常处理代码显式区别开来,提高了程序的可读性。 5.2 异常处理机制 异常处理的基本思想 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 块外引用。 例:处理除零异常 #includeiostream.h int Div(int x,int y); void main() { try { cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout7/1=Div(7,1)endl; } catch(int) { coutexcept of deviding zero.\n; } coutthat

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档