清华大学C++程序设计 第十二章 异常处理
更新时间:2023-09-04 18:15:01 阅读量: 教育文库 文档下载
清华大学C++程序设计
C++语言程序设计
第十二章 异常处理清华大学 郑 莉
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
本章主要内容
异常处理的基本思想 C++异常处理的实现 异常处理中的构造与析构
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
异常处理的基本思想调用者 函数f()捕获并处理异常 ……
调用关系
异常传播方向
函数g()
函数h()
引发异常3
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
异常处理的实现机制
抛掷异常的程序段 ...... throw ......
表达式;
捕获并处理异常的程序段 try 复合语句 catch(异常类型声明) 复合语句 catch(异常类型声明) 复合语句 …
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
异常处理的实现机制若有异常则通过throw操作创建一个异常对象并抛掷。 将可能抛出异常的程序段嵌在try块之中。控制通过正 常的顺序执行到达try语句,然后执行try块内的保护段。 如果在保护段执行期间没有引起异常,那么跟在try块 后的catch子句就不执行。程序从try块后跟随的最后一 个catch子句后面的语句继续执行下去。 catch子句按其在try块后出现的顺序被检查。匹配的 catch子句将捕获并处理异常(或继续抛掷异常)。 如果匹配的处理器未找到,则运行函数terminate将被 自动调用,其缺省功能是调用abort终止程序。
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
例12-1处理除零异常#include<iostream.h> int Div(int x,int y); int main() { 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<<"except of deviding zero.\n"; } cout<<"that is ok.\n"; } int Div(int x,int y) 程序运行结果如下: { if(y==0) throw y; 5/2=2 return x/y; } except of deviding zero.
that is ok.6
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
异常接口声明
可以在函数的声明中列出这个函数可 能抛掷的所有异常类型。–例如: void fun() throw(A,B,C,D);
若无异常接口声明,则此函数可以抛 掷任何类型的异常。 不抛掷任何类型异常的函数声明如下:
void fun() throw();7
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
异常处理中的构造与析构
找到一个匹配的catch异常处理后: – 初始化参数。 – 将从对应的try块开始到异常被抛掷 处之间构造(且尚未析构)的,所 有自动对象进行析构。 – 从最后一个catch处理之后开始恢复 执行。8
清华大学C++程序设计
C++语言程序设计
清华大学 郑莉
例12-2 异常处理时的析构#include <iostream.h> void MyFunc( void ); class Expt { public: Expt(){}; ~Expt(){}; const char *ShowReason() const { return "Expt类异常。"; } };9
清华大学C++程序设计
class Demo { public: Demo(); ~Demo(); }; Demo::Demo() { cout<<"构造 Demo."<<endl; } Demo::~Demo() { cout<<"析构 Demo."<<endl; }10
清华大学C++程序设计
void MyFunc() { Demo D
; cout<<"在MyFunc()中抛掷Expt类异常。"<<endl; throw Expt(); } int main() { cout<<"在main函数中。"<<endl; try { cout<<"在try块中,调用MyFunc()。" <<endl; MyFunc(); }11
清华大学C++程序设计
catch( Expt E ) { cout<<"在catch异常处理程序中。"<<endl; cout<<"捕获到Expt类型异常:"; cout<<E.ShowReason()<<endl; } catch( char *str ) { cout<<"捕获到其它的异常:"<<str<<endl;} cout<<"回到main函数。从这里恢复执行。" <<endl; return 0;
}12
清华大学C++程序设计
程序运行时输出:在main函数中。 在try块中,调用MyFunc()。 构造 Demo. 在MyFunc()中抛掷Expt类异常。 析构 Demo. 在catch异常处理程序中。 捕获到Expt类型异常:Expt类异常。 回到main函数。从这里恢复执行。
正在阅读:
李渔《闲情偶寄》对古文诵读教学的启示03-12
廉洁司法集中教育活动对照检查材料10-22
著作权法目的与利益平衡论07-08
环保的社会实践报告04-20
海淀区社区办关于赴深圳考察义工活动的报告06-01
吉尔吉斯斯坦水电市场投资前景预测报告07-24
4B unit 6 考点精练11-14
最新审定新北京版三年级语文下册《早发白帝城》课件1 北京版08-08
四年级信息技术教学设计与反思03-24
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 清华大学
- 程序设计
- 异常
- 处理
- 十二