版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章内容回顾模板的概念模板函数类模板标准模板库第十章异常处理和跟踪预习检查捕获异常的关键字是什么?举出一个异常的例子?3本章结构异常概念异常处理和跟踪调试异常的实现和基本规则异常的基本思想多路捕捉异常处理机制使用异常的方法10.1异常概念程序的错误,一种是编译错误,即语法错误另一种是在运行时发生的错误不可预料的逻辑错误逻辑错误是由于不当的设计造成的可以预料的运行异常运行异常.可以预料,但不能避免,它是由系统运行环境造成的。然而这些错误是能够预料的,通常加入一些预防代码便可防止这些异常
10.1.1异常处理的基本思想函数f()捕获并处理异常函数h()引发异常函数g()……调用者异常传播方向调用关系10.1.1异常处理的基本思想抛掷异常的程序段捕获并处理异常的程序段......throw表达式;......try
复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句
…10.1.2异常的实现及基本规则intmain(){
cout<<“Start\n”;try{
cout<<“Insidetryblock\n”;throw100;//抛出异常
cout<<“Thiswillnotexecute”;}
catch(inti){//捕获异常
cout<<“Caughtanexception–valueis:”;
cout<<i<<endl;}catch(…){cout<<“default”<<endl;}
cout<<“End”;return0;}10.1.2异常的实现及基本规则异常处理机制#include<iostream.h>intDiv(int
x,inty);intmain(){ try {cout<<"5/2="<<Div(5,2)<<endl;
cout<<"8/0="<<Div(8,0)<<endl;
cout<<"7/1="<<Div(7,1)<<endl; }
catch(int) {cout<<"exceptofdevidingzero.\n";}
cout<<"thatisok.\n";}intDiv(int
x,inty){ if(y==0)throwy; returnx/y;}程序运行结果如下:5/2=2exceptofdevidingzero.thatisok.10.1.2异常的实现及基本规则编写异常处理程序的规则是任意数量的catch分程序立即出现在try分程序之后。在catch行的圆括号中可包含数据类型声明如果一个函数抛掷一个异常,但在通往异常处理函数的调用链中找不到与之匹配的catch,则该程序通常以abort()函数调用终止10.2多路捕捉多数程序可能有若干不同种类的运行错误,它们可以用异常处理机制。每种错误可与一个类、一个数据类型或一个值有关。这样,在程序中就会出现多路捕获。10.2多路捕捉classRange{//异常类1
public:
Range(int
j):index(j){}
intindex;};classSize{};//异常类2char&operator[](intk){
if(0<=k&&k<len)
returnp[k];
throwRange(k);}10.2多路捕捉if(si<0||max<si)
throwSize();try{
//代码区2
Strings("abcdefghijklmnop",10);
g(s);}catch(String::Ranger){
cerr<<"->outofrange:"<<r.index<<endl;
//代码区3}catch(String::Size){
cerr<<"sizeillegal!\n";}
10.3异常处理机制异常处理机制若有异常则通过throw操作创建一个异常对象并抛掷。将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。catch子句按其在try块后出现的顺序被检查。匹配的catch子句将捕获并处理异常(或继续抛掷异常)。如果匹配的处理器未找到,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序10.4使用异常的方法多个异常组成族系构成异常族系的一些示例有数学错误异常族系文件处理错误异常族系。在c++代码中把异常组在一起有两种方式:异常枚举族系异常派生层次结构。10.4使用异常的方法例如,下面的代码是一个异常枚举族系的例子:
enum
FileErrors{nonExist,wrongFormat,diskSeekError....};try{
//...
throwwrongFormat;}catch(FileErrors
fe){
switch(re)
{
casenonExist:
//...
casewrongFormat:
//...
casediskSeekError:
//...10.4使用异常的方法例如,下面的代码是一个按异常派生层次结构来实现:
classFileErrors{};classnonExist:public
FileErrors{};classWrongFormat:public
FileErrors{};classDiskSeekError:FileErrors{};intf(){ try
{
//...
throwwrongFormat;
}
catch(NonExist)
{
//…
}
catch(DiskSeekError)
{
//...
}
catch(FileError) {
//...
}
//...}C++异常处理机制C++标准库提供了exception的类,它是所有标准库异常类的父类exception有一个virtual函数what(),它返回一个字符串描述异常类型.
参考代码std_exception.cpp本章总结异常概念异常处理和跟踪调试异常
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省汕头市重点中学2025年高三语文试题下学期第七次模拟考试试题含解析
- DB54T 0414-2024藏天麻林下野生抚育技术规程
- 福建省莆田市八中2025届高三期中考试语文试题含解析
- 关于伪娘流形成的原因以及影响的社会调查
- 四川省广安友实学校2024-2025学年高二上学期第一次月月考历史试题
- 北京市师大二附中2024-2025学年高三模拟语文试题含解析
- 临床护理路径在癫痫护理中的应用及满意度分析-当代护理
- 专题07名著阅读-2022年中考语文分项专练(山东济南专用)(原卷版)
- 5.5铅笔头模型锯齿模型翘脚模型(原卷版)
- 第11讲实际问题与二次函数(原卷版)
- 2022年海南省医疗服务价格目录
- 绝经后骨质疏松症老年性骨质疏松症原发性骨质疏松症
- 湖北省武汉市武昌区七校联考2023-2024学年七年级上学期期中联考英语试题
- 2023春国开合同法第5章试题及答案
- 管网漏水探测技术及设备应用
- 虫鼠害检查记录表
- 第七章 2015-9-28 新药研发领域的伦理.2
- 拍卖公司管理制度-拍卖有限公司内部管理制度
- (新平台)国家开放大学《农村社会学》形考任务1-4参考答案
- 2023南方区域AGC发电单元调频指标计算规范2019版
- 统编版高中语文必修上册 第三单元学习任务群:文学阅读与写作课件
评论
0/150
提交评论