C++第18章 异常处理PPT学习课件_第1页
C++第18章 异常处理PPT学习课件_第2页
C++第18章 异常处理PPT学习课件_第3页
C++第18章 异常处理PPT学习课件_第4页
C++第18章 异常处理PPT学习课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

异常处理,主讲教师:陈婷,18.1异常的概念18.2异常的实现18.3异常的规则18.4默认异常处理18.5异常派生族系,本章内容,#includeusingnamespacestd;voiddivided(doublea,doubleb)/实现两个浮点数除法doubleresult=a/b;/会不会有问题?coutab;divided(a,b);/调用divided函数return0;,18.1异常的概念,Ch18_01,#include#includeusingnamespacestd;intmain()char*ch;/字符指针longlongsize;coutsize;coutch;cout“StringSize=”strlen(ch)b;divided(a,b);return0;,18.2异常的实现,Ch18_03,说明:try语句块表示块中的语句可能会发生异常,放在其中加以监控。注意:C+只理会受监控的运行异常。throw后面的表达式的类型被称为所引发的异常类型。在try语句块之后必须紧跟一个或多个catch语句,目的是对发生的异常进行处理(注意:try之前不允许出现catch)。catch()括号中的声明只能容纳一个形参,当类型与抛掷异常的类型匹配时,该catch()语句块便称捕获了一个异常而转到其块中进行异常处理。catch()形参的值则为throw语句抛掷的异常值。当异常发生时,try语句块中异常之后的语句不再执行。,18.2异常的实现,#includeusingnamespacestd;voiddivided(doublea,doubleb)/实现两个浮点数除法doubleresult;try/定义异常if(b=0.0)throwb;/抛掷异常result=a/b;coutab;divided(a,b);return0;,18.3异常的规则,Ch18_04,C+只理会受监控的运行异常,#includeusingnamespacestd;intmain()intidx;coutidx;try/定义异常if(idx=0)throw10;/int型异常elseif(idx=1)throw13.14;/double型异常elseif(idx=2)throwc;/char型异常elsethrow“C+”;/字符串异常,18.3异常的规则,catch(intn)/捕获int型异常cout“IntException:”nendl;catch(doubled)/捕获double型异常cout“DoubleException:”dendl;catch(charc)/捕获char型异常cout“CharException:”cendl;catch(char*s)/捕获字符串异常cout“StringException:”sidx;try/定义异常if(idx=0)throw10;/int型异常elseif(idx=1)throw13.14;/double型异常elseif(idx=2)throwc;/char型异常elsethrow“C+”;/字符串异常,18.3异常的规则,catch(int)/捕获int型异常cout“IntException!”endl;catch(double)/捕获double型异常cout“DoubleException!”endl;catch(char)/捕获char型异常cout“CharException!”endl;catch(char*)/捕获字符串异常cout“StringException!”idx;try/定义异常if(idx=0)throw10;/int型异常elseif(idx=1)throw13.14;/double型异常elseif(idx=2)throwc;/char型异常elseif(idx=3)throwCException();/类异常,18.3异常的规则,elsethrow“C+”;/字符串异常catch(int)/捕获int型异常cout“IntException!”endl;catch(double)/捕获double型异常cout“DoubleException!”endl;catch(char)/捕获char型异常cout“CharException!”endl;catch(CException)/捕获类异常cout“ClassException!”idx;try/定义异常if(idx=0)throw10u;/unsignedint型异常elseif(idx=1)throw13.14f;/float型异常elseif(idx=2)throwc;/char型异常elsethrowCException();/类异常,18.3异常的规则,catch(int)/捕获int型异常cout“IntException!”endl;catch(double)/捕获double型异常cout“DoubleException!”endl;catch(char)/捕获char型异常cout“CharException!”endl;catch(CException)/捕获类异常cout“ClassException!”b;try/定义异常if(b=0.0)throwb;/抛掷异常result=a/b;catch(double)/捕获、处理异常coutb;result=a/b;catch(int)cout“IntException!”endl;/捕获、处理异常cout“a/b=”resultendl;/catch块后的语句return0;,18.3异常的规则,Ch18_08,当catch分程序执行完毕时,则跟随最后一个catch分程序的代码就会被执行。,#includeusingnamespacestd;doubledivided(doublea,doubleb)/实现两个浮点数除法if(b=0.0)throwb;/抛出异常returna/b;intmain()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“Exceptionofdividingzerooccurs!”idx;try/定义异常if(idx=0)throw10;/int型异常elseif(idx=1)throw13.14;/double型异常elseif(idx=2)throwc;/char型异常elseif(idx=3)throwCException();/类异常elsethrow“Exception”;/字符串异常,18.4默认异常处理,catch(int)/捕获int型异常cout“IntException!”endl;catch(double)/捕获double型异常cout“DoubleException!”endl;catch(char)/捕获char型异常cout“CharException!”endl;catch(CException)/捕获类异常cout“ClassException!”endl;catch()/捕获所有其他异常cout“UnexpectedException!”exception;try/定义异常switch(exception)case1:throwIncorrectDirectory();break;/抛掷派生类异常case2:throwIncorrectFormat();break;/抛掷派生类异常case3:throwFileCorruption();break;/抛掷派生类异常case4:throwFileError();break;/抛掷基类异常default:throw“Unexpected”;break;/抛掷字符串异常,18.5异常派生族系,catch(FileError)/捕获基类异常cout“FileErrorException!”endl;catch(IncorrectDirectory)/捕获派生类异常cout“IncorrectDirectoryException!”endl;catch(IncorrectFormat)/捕获派生类异常cout“IncorrectFormatException!”endl;catch(FileCorruption)/捕获派生类异常cout“FileCorruptionException!”endl;catch()/捕获其他异常cout“UnexpectedException!”exception;tryswitch(exception)case1:throwIncorrectDirectory();break;/抛掷派生类异常case2:throwIncorrectFormat();break;/抛掷派生类异常case3:throwFileCorruption();break;/抛掷派生类异常case4:throwFileError();break;/抛掷基类异常default:throw“Unexpected”;break;/抛掷字符串异常,18.5异常派生族系,正确异常处理方式,catch(IncorrectDirectory)/捕获派生类异常cout“IncorrectDirectoryException!”endl;catch(IncorrectFormat)/捕获派生类异常cout“IncorrectFormatException!”endl;catch(FileCorruption)/捕获派生类异常cout“FileCorruptionException!”endl;catch(FileError)/捕获基类异常cout“FileErrorException!”endl;catch()/捕获其他异常cout“UnexpectedException!”endl;return0;,18.5异常派生族系,将catch(基类)语句块总是放在catch(派生类)语句块的后面!,下列关于异常的叙述错误的是:A.编译错属于异常,可以抛出B.运行错属于异常C.硬件故障也可当异常抛出D.只要是编程者认为是异常的都可当异常抛出,下列叙述错误的是:throw的操作数表示异常类型B.throw的操作数值可以区别不同的异常C.throw抛出不同异常时需要用不同的操作数类型来区分D.throw语句抛出的异常可以不被捕获,下列叙述错误的是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论