面向对象程序设计第十二章异常处理机制优秀课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象程序设计 第十二章异常处理
机制
本章主要内容:
●异常处理的任务与思想 ●异常处理的实现 ●异常处理的应用 ●异常处理中的构造与析构 ● C++标准异常类
10.1 异常处理的任务与思想
●软件不仅要保证能正确完成任务,还应当具有 良好的容错性。
●容错性是指软件不仅在正确操作的条件下能正 确运行,而且当环境异常或不当使用时,依 然能合理处理运行过程中的出现的各种异常, 而不会产生各种意想不到的后果。
2. C++异常处理机制
调用者 函数f()捕获并处理异常
调用关系
…… 异常传播方向
函数g()
函数h() 引发异常
10.2 C++异常处理的实现
●C++语言提供了对异常处理机制的内部支持 ●由try、throw和catch语句提供了C++用于实 现异常处理的机制。
●在异常处理机制的支持下,可以更合理、更 有效的处理程序运行过程中存在的各种异常现 象。
double div(double x,double y)
double div(double,double);
void main()
{
double x,y;
try
//try语句块
{ if(x==0) throw y;
return y/x; }
//若x=0时,抛出异常
{
cout<<"Please input y=";
● throw之后的“表达式”表示异常类型,它在语法 上与return语句的“表达式”值类似;
● throw语句表达式的值不能用来区分不同异常,所 以当程序将要抛出多个异常,应该用不同类型的表达 式值相互区别;
有关说明(续)
●catch语句块是异常处理的程序代码,捕获和处理 由“throw 表达式”所抛出的异常。
●程序中的各种异常通过分析完全可以预料 。
●根据异常的不同情况进行对异常进行处理, 如给出提示信息、允许用户排除环境错误、 继续运行程序等都是异常处理的基本任务。
1. 传统的异常处理方法
●传统程序设计方法中,通常采用系统提供的中断 函数或指令。
●当被调用函数发生异常或产生错误时,返回一个 特定的值,以便调用函数检测错误标志,并作出 处理;或当错误产生时,释放所有资源,结束程 序运行
● catch 之后的异常类型可以是任何有效的数据类 型,它与函数的形参类似,既可以是 int、float等 某个类型值,也可以是引用及C++的类,它用于指定 catch语句块所处理的异常的类型;
● 当异常被抛出后,catch块依次被检查 ,若某 catch语句块的异常类型与被抛出的异常类型一致, 则执行该异常处理程序段。
不足之处是异常处理代码分布
cin>>y;
于程序中可能出错的各个地方,
cout<<"Please input x=";
异常处理代码与系统功能实现
cin>>x;
代码混在一起,降低程序的可
else
if(x==0) cout<<"Divided
by
zero,Error读软!"<性件<e与的nd可开l; 维发护,性也,不不符适合合现大代型软
1. 异常处理的语法
● try-throw-catch是C++异常处理机制的实现语句; ●程序中可能产生异常的部分应包含于try块之中; ●异常由紧随其后的catch语句捕获和处理; ● throw语句的作用是抛出异常。
异常处理程序的使用形式
try {
语句; } catch (类型1 参数1) {
●若预料某段程序代码或某个函数可能发生异常或 错误,就应当将之置于try语句块之内;
●一旦该代码段或函数在调用过程中产生了异常情 况,throw语句将抛出这个异常,并通过throw之后 的表达式返回一个值;
有关说明(续)
●当函数出现了自己不能处理的异常,就可以使用 “throw 表达式”将异常抛出;
终止函数执行,返回表达式的值
stdlib.h
#include <iostream.h> double div(double,double);
传统异常处理方法的优点是异 常处理直接,系统运行开销少,
void main()
适用于处理简单的局部错误与
{
异常。
double x,y;
cout<<"Please input y=";
常用中断函数或指令
函数原型/指令


头文件
void abort()
中断程序执行,返回主C++窗口
stdlib.h
void assert(表达式) 若表达式的值为false则中断程序执行, assert.h 并显示中断所在的文件和所在行号
void exit(状态) return 表达式
中断程序执行,返回退出代码(状态 值)
有关说明(续)
●在一个try语句块内,异常处理程序将按照它出 现的位置先后顺序进行检查。若找到一个匹配的 异常类型,后面的异常处理都将被忽略;
●如果异常类型声明是一个省略号(…),则表示 catch语句可以处理任何类型的异常;
●类型为省略号的catch处理程序必须是try块的 最后一段处理程序。
#include <iostream.h>
并可能存在调用关系,发生错误的函数可能不便于或 不具备处理错误的条件。
● C++异常处理机制的基本思想是将异常检测与异常处
理分离。产生异常的函数不一定需要具备异常处理的 能力,当一个函数发生异常时,它抛出所发生的异常 或错误,由调用者捕获或处理异常,若上层调用函数 仍不便于处理异常,还可以进一步抛出异常,按调用 层次关系传递给更上一层处理。
与类型1相关的异常处理语句; } catch (类型2 参数2) {
与类型2相关的异常处理语句; }
┇ catch (类型n 参数n) {
与类型n相关的异常处理语句; }
throw表达式使用格式如下:
throw 表达式;
有关说明
● try语句块实际上是程序代码的保护段,表明该 程序段在执行过程中可能会产生异常或出现错误;
{
件工程的理念
cout<<"q="<<div(x,y)<<endl;
}
cout<<"End of the program."<<endl;
}
double div(double wenku.baidu.com,double y)
{
return y/x;
}
2. C++异常处理机制
●在大型软件中,由于函数之间具有各自明确的分工
相关文档
最新文档