《chap12C课件清华大学郑莉.pptx》由会员分享,可在线阅读,更多相关《chap12C课件清华大学郑莉.pptx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1本章主要内容异常处理的基本思想C+异常处理的实现异常处理中的构造与析构第1页/共13页2异常处理的基本思想函数f()捕获并处理异常函数h()引发异常函数g()调用者异常传播方向调用关系第2页/共13页3异常处理的实现机制抛掷异常的程序段.throw 表达式;.捕获并处理异常的程序段try 复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句 第3页/共13页4异常处理的实现机制若有异常则通过throw操作创建一个异常对象并抛掷。将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。如果在保护段执行期间没有引起异常,那
2、么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。catch子句按其在try块后出现的顺序被检查。匹配的catch子句将捕获并处理异常(或继续抛掷异常)。如果匹配的处理器未找到,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序。第4页/共13页5例12-1处理除零异常#includeint Div(int x,int y);int main()try cout5/2=Div(5,2)endl;cout8/0=Div(8,0)endl;cout7/1=Div(7,1)endl;catch(int)coutex
3、cept of deviding zero.n;coutthat is ok.n;int Div(int x,int y)if(y=0)throw y;return x/y;程序运行结果如下:5/2=25/2=2except of deviding zero.except of deviding zero.that is ok.that is ok.第5页/共13页6异常接口声明可以在函数的声明中列出这个函数可能抛掷的所有异常类型。例如:void fun()throw(A,B,C,D);若无异常接口声明,则此函数可以抛掷任何类型的异常。不抛掷任何类型异常的函数声明如下:void fun()th
4、row();第6页/共13页7异常处理中的构造与析构找到一个匹配的catch异常处理后:初始化参数。将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的,所有自动对象进行析构。从最后一个catch处理之后开始恢复执行。第7页/共13页8例12-2 异常处理时的析构#include void MyFunc(void);class Expt public:Expt();Expt();const char*ShowReason()const return Expt类异常。;第8页/共13页class Demo public:Demo();Demo();Demo:Demo()cout构造 De
5、mo.endl;Demo:Demo()cout析构 Demo.endl;9第9页/共13页void MyFunc()Demo D;cout在MyFunc()中抛掷Expt类异常。endl;throw Expt();int main()cout在main函数中。endl;try cout在try块中,调用MyFunc()。endl;MyFunc();10第10页/共13页 catch(Expt E)cout在catch异常处理程序中。endl;cout捕获到Expt类型异常:;coutE.ShowReason()endl;catch(char*str)cout捕获到其它的异常:strendl;cout回到main函数。从这里恢复执行。endl;return 0;11第11页/共13页程序运行时输出:在main函数中。在try块中,调用MyFunc()。构造 Demo.在MyFunc()中抛掷Expt类异常。析构 Demo.在catch异常处理程序中。捕获到Expt类型异常:Expt类异常。回到main函数。从这里恢复执行。12第12页/共13页13感谢您的观赏!第13页/共13页
限制150内