C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt

C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt

ID:50085243

大小:272.50 KB

页数:29页

时间:2020-03-08

C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt_第1页
C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt_第2页
C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt_第3页
C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt_第4页
C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt_第5页
资源描述:

《C++程序设计语言 第9-10章 教学课件 作者 揣锦华_第10章 异常处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第10章异常处理10.1异常处理机制10.2异常处理的实现10.3异常处理中的构造与析构10.1异常处理机制在一个大型软件中,由于函数之间有着明确的分工和复杂的调用关系,发现错误的函数往往不具备处理错误的能力。因此,C++语言异常处理机制的基本思想是将异常的检测与处理分离。当在一个函数体中检测到异常条件存在,但却无法确定相应的处理方法时,该函数将引发一个异常,由函数的直接或间接调用者捕获这个异常并处理这个错误。如果程序始终没有处理这个异常,最终它会被传到C++运行系统那里,运行系统捕获异常后,通常只是简

2、单地终止这个程序。由于异常处理机制使得异常的引发和处理不必在同一函数中,这样,底层的函数可以着重解决具体问题而不必过多地考虑对异常的处理;上层调用者可以在适当的位置设计对不同类型异常的处理。10.2异常处理的实现10.2.1异常处理的语法1.throw语法throw<表达式>;当某段程序发现了自己不能处理的异常,就可以使用throw语句将这个异常抛掷给调用者。throw语句的使用与return语句相似,如果程序中有多处要抛掷异常,应该用不同的表达式类型来互相区别,表达式的值不能用来区别不同的异常。2.t

3、ry块语法try{复合语句}try语句后的复合语句是代码的保护段。如果预料某段程序代码(或对某个函数的调用)有可能发生异常,就将它放在try语句之后。如果这段代码(或被调函数)运行时真的遇到异常情况,其中的throw表达式就会抛掷这个异常。3.catch语法catch(异常类型1参数1){//针对异常类型1的处理语句}catch(异常类型2参数2){//针对异常类型2的处理语句}...catch(异常类型n参数n){//针对异常类型n的处理语句}catch语句后的复合语句是异常处理程序,捕获由throw

4、表达式抛掷的异常。异常类型声明部分指明语句所处理的异常类型,它与函数的形参相类似,可以是某个类型的值,也可以是引用。这里的类型可以是任何有效的数据类型,包括C++的类。当异常被抛掷以后,catch语句便依次被检查。10.2.2异常处理的执行过程异常处理的执行过程如下:①控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。②如果在保护段执行期间没有引起异常,那么跟在try块后的catch语句就不执行,程序从异常被抛掷的try块后跟随的最后一个catch语句后面的语句继续执行下去。③如果在保护

5、段执行期间或在保护段调用的任何函数中(直接或间接的调用)有异常被抛掷,则从通过throw创建的对象中创建一个异常对象(这隐含指可能包含一个拷贝构造函数)。这一点上,编译器能够处理抛掷类型的异常,在更高执行上下文中寻找一个catch语句(或一个能处理任何类型异常的catch处理程序)。catch处理程序按其在try块后出现的顺序被检查。如果没有找到合适的处理程序,则继续检查下一个动态封闭的try块。此处理继续下去,直到最外层的封闭try块被检查完。④如果匹配的处理器未找到,则terminate()将被自动

6、调用,而函数terminate()的默认功能是调用abort终止程序。⑤如果找到了一个匹配的catch处理程序,且它通过值进行捕获,则其形参通过拷贝异常对象进行初始化。如果它通过引用进行捕获,则参量被初始化为指向异常对象,在形参被初始化之后,“循环展开栈”的过程开始。这包括对那些在与catch处理器相对应的try块开始和异常丢弃地点之间创建的(但尚未析构的)所有自动对象的析构。【例10-1】处理除零异常例题。#includeintDiv(intx,inty);//整数除法函数原型

7、声明voidmain(){try//由于除法运算有可能出现除零异常,因此放在try块中{cout<<"5/2="<

8、数为零,抛掷一个整数异常returnx/y;}程序运行结果为5/2=2exceptionofdividingzero.thatisok.从运行结果可以看出,当执行下列语句时,在函数Div()中发生除零异常。cout<<"8/0="<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。