收藏 分销(赏)

C++第18章异常处理ppt课件.ppt

上传人:二*** 文档编号:7994442 上传时间:2025-01-30 格式:PPT 页数:26 大小:401.04KB 下载积分:5 金币
下载 相关 举报
C++第18章异常处理ppt课件.ppt_第1页
第1页 / 共26页
本文档共26页,全文阅读请下载到手机保存,查看更方便
资源描述
,2019/12/25,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,异常处理,1,本章内容,18.1,异常的概念,18.2,异常的实现,18.3,异常的规则,18.4,默认异常处理,18.5,异常派生族系,2,18.1,异常的概念,#include,using namespace std,;,void,divided(,double,a,double,b),/,实现两个浮点数除法,double,result=a/b;,/,会不会有问题?,cout,“Result=”,resultendl;,int,main(),double,a,b;,coutab;,divided(a,b);,/,调用,divided,函数,return,0;,Ch18_01,3,18.1,异常的概念,#include,#include,using namespace std,;,int,main(),char,*,ch;,/,字符指针,long,long,size;,coutsize;,cout,Size Value:,sizeendl;,ch=,new,char,size;,/,申请堆空间,是否有问题?,coutch;,cout,“String Size=”,strlen(ch)endl;,delete,ch;,/,释放堆空间,return,0;,Ch18_02,4,18.1,异常的概念,异常(,Exception,),:,程序有时会遇到,运行阶段错误,,导致程序无法正常地运行下去。,例如:,程序试图打开一个不可用的文件,请求过多的内存,遭遇不能容忍的值,说明,:,运行异常,,可以预料,,,但不能避免,,它是由系统运行环境造成的,程序要有能够解决这种运行异常的能力,异常处理机制,5,18.2,异常的实现,使用异常处理机制的步骤,:,定义异常,。将那些有可能产生错误的语句框定在,try,语句块,中。,定义异常处理(捕获异常),。将异常处理的语句放在,catch,语句块,中,以便异常被传递过来时进行处理。,抛掷异常,。检测是否产生异常,若是,则通过,throw,语句,抛掷异常。,try,语句:定义异常,catch,语句:,捕获,异常,throw,语句:抛掷异常,6,18.2,异常的实现,#include,using namespace std,;,void,divided(,double,a,double,b),/,实现两个浮点数除法,double,result;,try,/,定义异常,if,(b=0.0),throw,b;,/,抛掷,异常,result=a/b;,cout,“Result=”,resultendl,;,catch,(,double,val),/,捕获异常,cout,“Exception occurs!Exception value is”,valendl;,int,main(),double,a,b;,coutab;,divided(a,b);,return,0;,Ch18_03,7,18.2,异常的实现,说明,:,try,语句块表示块中的语句可能会发生异常,放在其中加以监控。,注意:,C+,只理会受监控的运行异常,。,throw,后面的表达式的,类型,被称为所引发的,异常类型,。,在,try,语句块,之后,必须,紧跟,一个或多个,catch,语句,目的是对发生的异常进行,处理(,注意,:,try,之前不允许出现,catch,)。,catch(),括号中的声明只能容纳,一个形参,,当类型与抛掷异常的类型匹配时,该,catch(),语句块便称捕获了一个异常而转到其块中进行异常处理,。,catch,(,),形参的值则为,throw,语句抛掷的异常值。,当异常发生时,,try,语句块中异常之后的语句,不再执行,。,8,18.3,异常,的规则,#include,using namespace std,;,void,divided(,double,a,double,b),/,实现两个浮点数除法,double,result;,try,/,定义异常,if,(b=0.0),throw,b;,/,抛掷异常,result=a/b;,cout,“a/b,=”,resultendl,;,result=b/a;,/,存在除,0,异常,未被监控,cout,“b/a,=”,resultendl,;,catch,(,double,val),/,捕获异常,cout,“Exception occurs!Exception value is”,valendl;,int,main(),double,a,b;,coutab;,divided(a,b);,return,0;,Ch18_04,C+,只理会受监控的运行异常,9,18.3,异常,的规则,#include,using namespace std,;,int,main(),int,idx;,coutidx;,try,/,定义,异常,if,(idx=0),throw,10;,/int,型异常,else if,(idx=1),throw,13.14;,/double,型异常,else if,(idx=2),throw,c,;,/char,型异常,else,throw,“C+”,;,/,字符串异常,catch,(,int,n,),/,捕获,int,型异常,cout,“Int Exception:”,nendl;,catch,(,double,d),/,捕获,double,型,异常,cout,“Double Exception:”,dendl;,catch,(,char,c),/,捕获,char,型,异常,cout,“Char Exception:”,cendl;,catch,(,char,*,s),/,捕获字符串异常,cout,“String Exception:”,sendl;,return,0;,Ch18_05,寻找,catch,中的最佳匹配来进行异常处理,10,18.3,异常,的,规则,#include,using namespace std,;,int,main(),int,idx;,coutidx;,try,/,定义,异常,if,(idx=0),throw,10;,/int,型异常,else if,(idx=1),throw,13.14;,/double,型异常,else if,(idx=2),throw,c,;,/char,型异常,else,throw,“C+”,;,/,字符串异常,catch,(,int,),/,捕获,int,型异常,cout,“Int Exception!”,endl;,catch,(,double,),/,捕获,double,型,异常,cout,“Double Exception!”,endl;,catch,(,char,),/,捕获,char,型,异常,cout,“Char Exception,!,”,endl;,catch,(,char,*,),/,捕获字符串异常,cout,“String Exception,!,”,endl;,return,0;,catch,中的形参名可以省略,但类型不能省略,11,18.3,异常,的,规则,#include,using namespace std,;,class,CException,;,/,类定义,int,main(),int,idx;,coutidx;,try,/,定义,异常,if,(idx=0),throw,10;,/int,型异常,else if,(idx=1),throw,13.14;,/double,型异常,else if,(idx=2),throw,c,;,/char,型异常,else if,(idx=3),throw,CException,();,/,类异常,else,throw,“C+”,;,/,字符串,异常,catch,(,int,),/,捕获,int,型异常,cout,“Int Exception!”,endl;,catch,(,double,),/,捕获,double,型,异常,cout,“Double Exception!”,endl;,catch,(,char,),/,捕获,char,型,异常,cout,“Char Exception,!,”,endl;,catch,(,CException,),/,捕获类异常,cout,“Class Exception,!,”,endl;,return,0;,当无匹配的,catch,进行异常处理时,系统调用默认异常处理程序,abort(),来终止程序运行。,Ch18_06,12,18.3,异常,的,规则,#include,using namespace std,;,class,CException,;,/,类定义,int,main(),int,idx;,coutidx;,try,/,定义,异常,if,(idx=0),throw,10,u,;,/unsigned int,型异常,else if,(idx=1),throw,13.14,f,;,/float,型异常,else if,(idx=2),throw,c,;,/char,型异常,else,throw,CException,(),;,/,类异常,catch,(,int,),/,捕获,int,型异常,cout,“Int Exception!”,endl;,catch,(,double,),/,捕获,double,型,异常,cout,“Double Exception!”,endl;,catch,(,char,),/,捕获,char,型,异常,cout,“Char Exception,!,”,endl;,catch,(,CException,),/,捕获类异常,cout,“Class Exception,!,”,endl;,return,0;,抛掷异常与异常处理程序之间是按数据类型,严格匹配,来捕获的,不允许类型转换。,Ch18_07,13,18.3,异常的规则,#include,using namespace std,;,int,main(),double,a,b,result;,coutab;,try,/,定义异常,if,(b=0.0),throw,b;,/,抛掷异常,result=a/b;,catch,(,double,),/,捕获、处理异常,cout,“Exception of dividing zero!Please input b again!”,b;,result=a/b;,catch,(,int,)cout,“Int Exception!”,endl;,/,捕获、处理异常,cout,“a/b=”,resultendl;,/catch,块后的语句,return,0;,Ch18_08,当,catch,分程序执行完毕时,则跟随最后一个,catch,分程序的代码就会被执行。,14,18.3,异常,的规则,#include,using namespace std,;,double,divided(,double,a,double,b),/,实现两个浮点数除法,if,(b=0.0),throw,b;,/,抛出,异常,return,a/b;,int,main(),try,/,定义异常,cout,“13.14/2.0=”,divided(13.14,2.0)endl;,cout,“13.14/0.0=”,divided(13.14,0.0)endl;,cout,“13.14/3.0=”,divided(13.14,3.0)endl;,catch,(,double,),/,捕获异常,cout,“Exception of dividing zero occurs!”,endl;,return,0;,可以将抛掷异常与处理异常放在不同的函数中,15,18.4,默认异常处理,#include,using namespace std,;,class,CException,;,/,类定义,int,main(),int,idx;,coutidx;,try,/,定义,异常,if,(idx=0),throw,10;,/int,型异常,else if,(idx=1),throw,13.14;,/double,型异常,else if,(idx=2),throw,c,;,/char,型异常,else if,(idx=3),throw,CException,(),;,/,类异常,else,throw,“Exception”,;,/,字符串,异常,catch,(,int,),/,捕获,int,型异常,cout,“Int Exception!”,endl;,catch,(,double,),/,捕获,double,型,异常,cout,“Double Exception!”,endl;,catch,(,char,),/,捕获,char,型,异常,cout,“Char Exception,!,”,endl;,catch,(,CException,),/,捕获类异常,cout,“Class Exception,!,”,endl;,catch,(,),/,捕获所有其他异常,cout,“Unexpected Exception!”,exception;,try,/,定义异常,switch,(exception),case,1:,throw,IncorrectDirectory,();,break,;,/,抛掷派生类异常,case,2:,throw,IncorrectFormat,();,break,;,/,抛掷派生类异常,case,3:,throw,FileCorruption,();,break,;,/,抛掷派生类异常,case,4:,throw,FileError,();,break,;,/,抛掷基类异常,default,:,throw,“Unexpected”,;,break,;,/,抛掷字符串异常,17,18.5,异常派生族系,catch,(,FileError,),/,捕获基类异常,cout,“FileError Exception!”,endl,;,catch,(,IncorrectDirectory,),/,捕获派生类异常,cout,“IncorrectDirectory Exception!”,endl;,catch,(,IncorrectFormat,),/,捕获派生类异常,cout,“IncorrectFormat Exception!”,endl;,catch,(,FileCorruption,),/,捕获派生类异常,cout,“FileCorruption Exception!”,endl;,catch,(,),/,捕获其他异常,cout,“Unexpected Exception!”,exception;,try,switch,(exception),case,1:,throw,IncorrectDirectory,();,break,;,/,抛掷派生类异常,case,2:,throw,IncorrectFormat,();,break,;,/,抛掷派生类异常,case,3:,throw,FileCorruption,();,break,;,/,抛掷派生类异常,case,4:,throw,FileError,();,break,;,/,抛掷基类异常,default,:,throw,“Unexpected”,;,break,;,/,抛掷字符串异常,正确异常处理方式,20,18.5,异常派生族系,catch,(,IncorrectDirectory,),/,捕获派生类异常,cout,“IncorrectDirectory Exception!”,endl;,catch,(,IncorrectFormat,),/,捕获派生类异常,cout,“IncorrectFormat Exception!”,endl;,catch,(,FileCorruption,),/,捕获派生类异常,cout,“FileCorruption Exception!”,endl;,catch,(,FileError,),/,捕获基类异常,cout,“FileError Exception!”,endl;,catch,(,),/,捕获其他异常,cout,“Unexpected Exception!”,endl;,return,0;,将,catch(,基类,),语句块总是放在,catch(,派生类,),语句块的后面!,21,下列关于异常的叙述错误的是:,A.,编译,错属于异常,可以抛出,B.,运行,错属于异常,C.,硬件,故障也可当异常抛出,D.,只要,是编程者认为是异常的都可当异常抛出,22,下列叙述错误的是:,throw,的操作数表示异常,类型,B.throw,的操作数值可以区别不同的,异常,C,.throw,抛出不同异常时需要用不同的操作数类型来,区分,D,.throw,语句抛出的异常可以不被捕获,23,下列叙述错误的是:,A.,catch,(,)语句可捕获所有类型的异常,B.,一,个,try,语句可以有多个,catch,语句,C.catch,(,)语句可以放在,catch,语句组的前面,D.,程序,中,try,语句与,catch,语句是一个整体,缺一不可,24,下列程序运行结果为:,class,A,public:,A()coutAn;,;,char fun0(),A A1;,throw(E);,return 0;,int main(),try,coutfun0()n;,catch(char c),coutcn;,return 0;,25,A.A,E,B.0,A,E,C.0,E,D.E,26,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

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

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

关注我们 :微信公众号    抖音    微博    LOFTER 

客服