清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十二章 异常处理

C++语言程序设计 第十二章异常处理 清华大学计算机与信息管理中心 郑莉
第十二章 异常处理 清华大学计算机与信息管理中心 郑 莉 C++语言程序设计

本章主要内率 ●异常处理的基本思想 C++异常处理的实现 异常处理中的构造与析构 休息
前一页 休息 本章主要内容 ⚫ 异常处理的基本思想 ⚫ C++异常处理的实现 ⚫ 异常处理中的构造与析构

异常处理的基本思想 调用者 函数fO捕获并处理异常 调用关系 异常传播方向 函数g( 函数h(引发异常 休息
前一页 休息 异常处理的基本思想 函数f()捕获并处理异常 函数h() 引发异常 函数g() …… 调用者 调用关系 异常传播方向

异常处理的奥现 catch子旬按其在ty‖若有异常则从通过 块后出现的顺序被检 throw操作创建一个 查。匹配的 catch子句 异常对象并抛掷 将捕获并处理异常 (或继续抛掷异常) 如果匹配的处理器未 找到,则运行函数 terminate将被自动调 用,其缺省功能是调 用abor终止程序
前一页 休息 异常处理的实现 ⚫ 抛掷异常的程序段 ...... throw 表达式; ...... ⚫ 捕获并处理异常的 程序段 try 复合语句 catch(异常类型声明) 复合语句 catch(异常类型声明) 复合语句 … • 控制通过正常的顺 序执行到达try语句, 然后执行try块内的 保护段。 • 如果在保护段执行 期间没有引起异常, 那么跟在try块后的 catch子句就不执行。 程序从try块后跟随 的最后一个catch子 句后面的语句继续 执行下去。 • 若有异常则从通过 throw操作创建一个 异常对象并抛掷。 •catch子句按其在try 块后出现的顺序被检 查。匹配的catch子句 将捕获并处理异常 (或继续抛掷异常)。 •如果匹配的处理器未 找到,则运行函数 terminate将被自动调 用,其缺省功能是调 用abort终止程序

例12-1处理除零异常 include int Div(int x, int y) void main( I try I cout<< 5/ 2=<<Div(5, 2)<<endl; cout<<"80=≤<Div(8,0)≤≤endl cout<< 711=<<Div(7, 1)<<endl; 休息
前一页 休息 例12-1处理除零异常 #include int Div(int x,int y); void 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) i cout<< except of deviding zero. In", cout<< that is ok,n int Div(int x, int y) if(y==0) 程序运行结果如下: throw y; 5/2=2 return xly except of deviding zero. that is ok
catch(int) { cout<<"except of deviding zero.\n"; } cout<<"that is ok.\n"; } int Div(int x,int y) { if(y==0) throw y; return x/y; } 程序运行结果如下: 5/2=2 except of deviding zero. that is ok

异常接口声明 可以在函数的声明中列出这个函数可 能抛掷的所有异常类型。 例如: void funo throw(A, B, C 若无异常接口声明,则此函数可以抛 掷任何类型的异常 ●不抛掷任何类型异常的函数声明如下 void fun( throw 休息
前一页 休息 异常接口声明 ⚫ 可以在函数的声明中列出这个函数可 能抛掷的所有异常类型。 – 例如: void fun() throw(A,B,C,D); ⚫ 若无异常接口声明,则此函数可以抛 掷任何类型的异常。 ⚫ 不抛掷任何类型异常的函数声明如下: void fun() throw();

异常处理中的构造与析构 找到一个匹配的 catch异常处理后: 初始化参数。 将从对应的ty块开始到异常被抛掷 处之间构造(且尚未析构)的,所 有自动对象进行析构。 从最后一个 catch处理之后开始恢复 执行。 休息
前一页 休息 异常处理中的构造与析构 ⚫ 找到一个匹配的catch异常处理后: –初始化参数。 –将从对应的try块开始到异常被抛掷 处之间构造(且尚未析构)的,所 有自动对象进行析构。 –从最后一个catch处理之后开始恢复 执行

例12-2异常处理时的析构 include void My Func( void ) class Expt i public: Exprot: Expt(f; const char*ShowReason( const return"Expt类异常。"; 了一页休息
前一页 休息 例12-2 异常处理时的析构 #include void MyFunc( void ); class Expt { public: Expt(){}; ~Expt(){}; const char *ShowReason() const { return "Expt类异常。"; } };

class demo i public: Demod: cDemo( Demo: Demo cout<<"构造Demo."<<endl; Demo: : -Demo cout<<"析构Demo."<<endl
class Demo { public: Demo(); ~Demo(); }; Demo::Demo() { cout << "构造 Demo." << endl; } Demo::~Demo() { cout << "析构 Demo." << endl; }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十一章 流类库与输入/输出.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十章 群体数据的组织.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第一章 绪论.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)目录.ppt
- 上海理工大学:《电子商务基础与应用》课程教学资源(PPT课件)第四版 第六章 网络交易行为.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第12章 文件处理.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第11章 C++输入/输出流.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第10章 虚函数和多态性.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第09章 继承性.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第08章 运算符重载.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第07章 类与数据抽象.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第06章 指针和引用.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第05章 结构体和共用体.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第04章 数组.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第03章 函数.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第02章 C++程序设计基础.ppt
- 人民邮电出版社:《C++语言程序设计》课程教学资源(PPT课件讲稿)第1章 C++概述.ppt
- 河南财经政法大学(河南财经学院):《分布式数据库系统及其应用》课程教学资源(PPT课件)第1章 分布式数据库系统概述(主讲:崔明义).ppt
- 河南财经政法大学(河南财经学院):《分布式数据库系统及其应用》课程教学资源(PPT课件)第9章 分布式数据库与WWW数据库和移动数据库.ppt
- 河南财经政法大学(河南财经学院):《分布式数据库系统及其应用》课程教学资源(PPT课件)第8章 分布式数据库与客户机服务器模式.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第十三章 MFC库与 Windows程序开发概述.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第二章 C艹十简单程序设计.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第三章 函数.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第四章 类与对象.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第五章 C艹程序的结构.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第六章 数组指针与字 符串.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第七章 继承与派生.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第八章 多态性.ppt
- 清华大学:《C++语言程序设计》课程教学资源(PPT课件)第九章 群体类.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第一章 ntel8086/8088的基本结构.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)绪言.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第三章 汇编语言与汇编程序.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第二章 8086/8088的寻址方式与指令系统.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第五章 输入/输出与中断系统.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第七章 Win32汇编语言程序设计.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第四章 汇编语言程序设计的基本方法.ppt
- 《汇编语言程序设计》课程教学资源(PPT课件讲稿)第六章 32位汇编程序设计.ppt
- 北京邮电大学电信工程学院:高等教学计算机教材《C++大学基础教程》课程教学资源(PPT课件)第一章 计机基础知识.ppt
- 北京邮电大学电信工程学院:高等教学计算机教材《C++大学基础教程》课程教学资源(PPT课件)第七章 PowerPoint2000.ppt
- 北京邮电大学电信工程学院:高等教学计算机教材《C++大学基础教程》课程教学资源(PPT课件)第三章 操作系统.ppt