南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 6-异常处理

第6章异常处理陈哲教授南京航空航天大学计算机科学与技术学院
1 第6章 异常处理 陈哲 教授 南京航空航天大学 计算机科学与技术学院

异常6.1异常是在程序执行期间的突发性事件。异常与错误不同,错误可通过编译系统处理1.抛出异常.Example:floatnumer, int div)divide(intif (div == 0)throw"ERROR:dividebyzero.Inelsefloat (numer) / div;return
2 6.1 异常 • 异常是在程序执行期间的突发性事件。 • 异常与错误不同,错误可通过编译系统处理。 • 1. 抛出异常 . Example: float divide(int numer, int div ) { if ( div == 0 ) throw "ERROR: divide by zero. \n"; else return float (numer) / div; }

异常(continued)6.12.处理异常。try!Ⅱ可能出现异常的程序代码catch(exception paramlⅡ处理异常类型1的代码catch(exception param2)/处理异常类型2的代码Ⅱ异常处理结束后,继续执行的代码
3 6.1 异常 (continued) 2. 处理异常。 try { // 可能出现异常的程序代码 } catch( exception param1 ) { // 处理异常类型1的代码 } catch( exception param2 ) { // 处理异常类型2的代码 } // 异常处理结束后,继续执行的代码

// 例6-1#includeusingnamespace std;floatdivide(int number, int div)if (div==throw"ERROR:divide by zero.In'elsefloat(number) / div;return
// 例6-1 #include using namespace std; float divide(int number, int div) { if (div == 0) throw "ERROR: divide by zero.\n"; else return float(number) / div; }

void main()intnuml, num2;思考:如果不处float quotient;理又怎么样?cout>numl >>num2;try(quotient = divide(numl, num2);cout<<"The quotient is "<< quotient;fcatch(char*exceptionString)cout<< exceptionString;6-1.cppcout<<"InEndoftheprogram.In
void main( ) { int num1, num2; float quotient; cout > num1 >> num2; try { quotient = divide(num1, num2); cout << "The quotient is " << quotient; }catch (char *exceptionString) { cout << exceptionString; } cout << "\nEnd of the program.\n"; } 思考:如果不处 理又怎么样? 6-1.cpp

异常(continued)6.1异常处理失败的原因:(1)try语句块中实际产生的异常,与catch语句圆括号指定要捕捉的异常类型不匹配:(2)try语句块的范围太小,在try语句之前就已经产生了异常,那么后面的try语句块将不再执行
6 6.1 异常 (continued) • 异常处理失败的原因: (1) try语句块中实际产生的异常,与catch语句圆括 号指定要捕捉的异常类型不匹配; (2) try语句块的范围太小,在try语句之前就已经产 生了异常,那么后面的try语句块将不再执行

6.2基于对象的异常处理·C++除了支持基本类型的异常处理外,还支持面向对象的异常处理。,C++在处理多种类型的异常时,要求这些异常对象必须属于不同类型,并且对每种类型的异常都要编写一段对应的catch代码·例如:6-3
7 6.2 基于对象的异常处理 • C++除了支持基本类型的异常处理外,还支持面 向对象的异常处理。 • C++在处理多种类型的异常时,要求这些异常对 象必须属于不同类型,并且对每种类型的异常都 要编写一段对应的catch代码。 • 例如:6-3

class IntRangeint input, lower,upper;public:新思想:基于对class TooLowl1象的异常处理class TooHigh1;.00IntRange(int low, int high) lower =low;upper =high;int getInput()cin >> input;if (input upper) throw TooHigh();return input;
class IntRange { int input, lower , upper; public: class TooLow{ }; class TooHigh{ } ; IntRange( int low, int high ) { lower = low; upper = high; } int getInput( ) { cin >> input; if (input upper) throw TooHigh( ); return input; } }; 新思想:基于对 象的异常处理

void main()IntRange range(5,10);int userValue;cout<<"输入一个5-10之间的值:tryuserValue=range.getlnputOcout<<"你输入的是"<<userValue<<endl;fcatch(IntRange :: TooLow) cout<<"输入值小于下限ln";fcatch(IntRange::TooHigh)cout<<"输入值大于上限\n";cout<<"程序结束In";6-3.cpp
void main( ) { IntRange range( 5 , 10 ) ; int userValue ; cout << "输入一个5-10之间的值:" ; try { userValue = range.getInput( ) ; cout << "你输入的是" << userValue << endl ; }catch( IntRange :: TooLow ) { cout << "输入值小于下限\n" ; }catch( IntRange :: TooHigh ) { cout << "输入值大于上限\n" ; } cout << "程序结束\n" ; } 6-3.cpp

6.4通过异常对象获取异常信息可以通过异常对象将异常信息传递给异常处理者·例如:1例6-410
10 6.4 通过异常对象获取异常信息 • 可以通过异常对象将异常信息传递给异常处理者。 • 例如:例6-4
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 5-继承多态和虚函数.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 4-类的高级部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 3-类的基础部分.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 2-文件操作.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 1-C++程序设计基础.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)09 编译预处理和多文件项目.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)08 文件.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)07 记录类型.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)06 数组.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)05 函数.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)04 控制流.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)03 运算符和表达式.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)02 常量和变量.pptx
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,一)01 计算机和程序.pptx
- 《程序设计》课程教学资源(实验指导)C++语言习题集(南京航空航天大学:陈哲).pdf
- 《程序设计》课程教学资源(书籍文献)Google开源项目风格指南(中文版).pdf
- 长春大学:旅游学院:《Visual FoxPro程序设计》课程教学资源(授课教案,共七章).pdf
- 《计算机导论》课程教学资源(授课教案,教材讲义,共六章).pdf
- 江苏大学:RISC-V CPU设计实验(讲义).pdf
- 黄河水利职业技术大学:《电商网站建设与优化》课程思政教案(教学设计)PHP动态网站开发.pdf
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 7-模板.ppt
- 南京航空航天大学:《程序设计》课程教学课件(PPT讲稿,二)Chapter 8-标准模板库STL.ppt
- 揭阳职业技术学院:《Linux操作系统》课程教学资源(实验教案,共十八个).pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《物联网》课程授课教案.pdf
- 揭阳职业技术学院:《程序设计基础》课程授课教案.pdf
- 揭阳职业技术学院:《办公自动化》课程授课教案.pdf
- 揭阳职业技术学院:《图像处理》课程授课教案.pdf
- 揭阳职业技术学院:《计算机应用基础》课程授课教案.pdf
- 揭阳职业技术学院:《Photoshop制图》课程授课教案.pdf
- 清华大学:《计算机图形学基础》课程教学大纲 Fundamental of Computer graphics(负责人:胡事民).pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)图形学简介.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)视图模型变换.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)双向反射分布函数.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)光线跟踪,递归算法,光线求交.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)参数曲线曲面、Bezier曲线、Bezier曲面.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)网格模型、网格细分和简化.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)网格参数化模型切割的骨架算法.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)B样条曲线曲面.pdf
- 清华大学:《计算机图形学基础》课程教学资源(授课教案)光线跟踪加速方法.pdf
