收藏 分销(赏)

清华大学版大学.pptx

上传人:w****g 文档编号:4429016 上传时间:2024-09-22 格式:PPTX 页数:13 大小:98.92KB
下载 相关 举报
清华大学版大学.pptx_第1页
第1页 / 共13页
清华大学版大学.pptx_第2页
第2页 / 共13页
清华大学版大学.pptx_第3页
第3页 / 共13页
清华大学版大学.pptx_第4页
第4页 / 共13页
清华大学版大学.pptx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、第十二章第十二章 异常处理异常处理清华大学清华大学郑郑 莉莉C+语言程序设计C+语言程序设计清华大学 郑莉2本章主要内容本章主要内容l异常处理的基本思想异常处理的基本思想lC+异常处理的实现异常处理的实现l异常处理中的构造与析构异常处理中的构造与析构C+语言程序设计清华大学 郑莉3异常处理的基本思想异常处理的基本思想函数f()捕获并处理异常函数h()引发异常函数g()调用者异常传播方向调用关系C+语言程序设计清华大学 郑莉4异常处理的实现机制异常处理的实现机制l抛掷异常的程序段抛掷异常的程序段.throw 表达式;.l捕获并处理异常的程序段捕获并处理异常的程序段try 复合语句catch(异常

2、类型声明)复合语句catch(异常类型声明)复合语句 C+语言程序设计清华大学 郑莉5异常处理的实现机制异常处理的实现机制l若有异常则通过若有异常则通过throwthrow操作创建一个异常对象并抛掷。操作创建一个异常对象并抛掷。l将可能抛出异常的程序段嵌在将可能抛出异常的程序段嵌在trytry块之中。控制通过正块之中。控制通过正常的顺序执行到达常的顺序执行到达trytry语句,然后执行语句,然后执行trytry块内的保护段。块内的保护段。l如果在保护段执行期间没有引起异常,那么跟在如果在保护段执行期间没有引起异常,那么跟在trytry块块后的后的catchcatch子句就不执行。程序从子句就不

3、执行。程序从trytry块后跟随的最后一块后跟随的最后一个个catchcatch子句后面的语句继续执行下去。子句后面的语句继续执行下去。lcatchcatch子句按其在子句按其在trytry块后出现的顺序被检查。匹配的块后出现的顺序被检查。匹配的catchcatch子句将捕获并处理异常(或继续抛掷异常)。子句将捕获并处理异常(或继续抛掷异常)。l如果匹配的处理器未找到,则运行函数如果匹配的处理器未找到,则运行函数terminateterminate将被将被自动调用,其缺省功能是调用自动调用,其缺省功能是调用abortabort终止程序。终止程序。C+语言程序设计清华大学 郑莉6例例12-1处理

4、除零异常处理除零异常#include#includeint Div(int x,int y);int Div(int x,int y);void main()void main()trytry cout5/2=Div(5,2)endl;cout5/2=Div(5,2)endl;cout8/0=Div(8,0)endl;cout8/0=Div(8,0)endl;cout7/1=Div(7,1)endl;cout7/1=Div(7,1)endl;catch(int)catch(int)coutexcept of deviding zero.n;coutexcept of deviding zero

5、.n;coutthat is ok.n;coutthat is ok.n;int Div(int x,int y)int Div(int x,int y)if(y=0)throw y;if(y=0)throw y;return x/y;return x/y;程序运行结果如下:程序运行结果如下:5/2=25/2=2except of deviding zero.except of deviding zero.that is ok.that is ok.C+语言程序设计清华大学 郑莉7异常接口声明异常接口声明l可以在函数的声明中列出这个函数可可以在函数的声明中列出这个函数可能抛掷的所有异常类型。能

6、抛掷的所有异常类型。例如:void fun()throw(A,B,C,D);l若无异常接口声明,则此函数可以抛若无异常接口声明,则此函数可以抛掷任何类型的异常。掷任何类型的异常。l不抛掷任何类型异常的函数声明如下:不抛掷任何类型异常的函数声明如下:void fun()throw();C+语言程序设计清华大学 郑莉8异常处理中的构造与析构异常处理中的构造与析构l找到一个匹配的找到一个匹配的catch异常处理后:异常处理后:初始化参数。将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的,所有自动对象进行析构。从最后一个catch处理之后开始恢复执行。C+语言程序设计清华大学 郑莉9例例1

7、2-2 异常处理时的析构异常处理时的析构#include#include void MyFunc(void);void MyFunc(void);class Exptclass Expt public:public:Expt();Expt();Expt();Expt();const char*ShowReason()const const char*ShowReason()const return Expt return Expt类异常。类异常。;class Democlass Demo public:public:Demo();Demo();Demo();Demo();Demo:Demo()

8、Demo:Demo()cout cout构造构造 Demo.endl;Demo.endl;Demo:Demo()Demo:Demo()cout cout析构析构 Demo.endl;Demo.endl;10void MyFunc()void MyFunc()Demo D;Demo D;cout cout在在MyFunc()MyFunc()中抛掷中抛掷ExptExpt类异常。类异常。endl;endl;throw Expt();throw Expt();int main()int main()cout cout在在mainmain函数中。函数中。endl;endl;try try cout co

9、ut在在trytry块中,调用块中,调用MyFunc()MyFunc()。endl;endl;MyFunc();MyFunc();11 catch(Expt E)catch(Expt E)cout cout在在catchcatch异常处理程序中。异常处理程序中。endl;endl;cout cout捕获到捕获到ExptExpt类型异常:类型异常:;coutE.ShowReason()endl;coutE.ShowReason()endl;catch(char*str)catch(char*str)cout cout捕获到其它的异常:捕获到其它的异常:strendl;strendl;cout cout回到回到mainmain函数。从这里恢复执行。函数。从这里恢复执行。endl;endl;return 0;return 0;12程序运行时输出程序运行时输出:在main函数中。在try块中,调用MyFunc()。构造 Demo.在MyFunc()中抛掷Expt类异常。析构 Demo.在catch异常处理程序中。捕获到Expt类型异常:Expt类异常。回到main函数。从这里恢复执行。13

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服