您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++语言程序设计(清华大学郑莉)十二
第十二章异常处理清华大学郑莉C++语言程序设计C++语言程序设计清华大学郑莉2本章主要内容异常处理的基本思想C++异常处理的实现异常处理中的构造与析构C++语言程序设计清华大学郑莉3异常处理的基本思想函数f()捕获并处理异常函数h()引发异常函数g()……调用者异常传播方向调用关系C++语言程序设计清华大学郑莉4异常处理的实现机制抛掷异常的程序段......throw表达式;......捕获并处理异常的程序段try复合语句catch(异常类型声明)复合语句catch(异常类型声明)复合语句…C++语言程序设计清华大学郑莉5异常处理的实现机制(续)若有异常则通过throw操作创建一个异常对象并抛掷。将可能抛出异常的程序段嵌在try块之中。控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行。程序从try块后跟随的最后一个catch子句后面的语句继续执行下去。catch子句按其在try块后出现的顺序被检查。匹配的catch子句将捕获并处理异常(或继续抛掷异常)。如果匹配的处理器未找到,则运行函数terminate将被自动调用,其缺省功能是调用abort终止程序。C++语言程序设计清华大学郑莉6例12-1处理除零异常#includeiostream.hintDiv(intx,inty);intmain(){try{cout5/2=Div(5,2)endl;cout8/0=Div(8,0)endl;cout7/1=Div(7,1)endl;}catch(int){coutexceptofdevidingzero.\n;}coutthatisok.\n;}intDiv(intx,inty){if(y==0)throwy;returnx/y;}程序运行结果如下:5/2=2exceptofdevidingzero.thatisok.C++语言程序设计清华大学郑莉7异常接口声明可以在函数的声明中列出这个函数可能抛掷的所有异常类型。–例如:voidfun()throw(A,B,C,D);若无异常接口声明,则此函数可以抛掷任何类型的异常。不抛掷任何类型异常的函数声明如下:voidfun()throw();C++语言程序设计清华大学郑莉8异常处理中的构造与析构找到一个匹配的catch异常处理后–初始化参数。–将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的所有自动对象进行析构。–从最后一个catch处理之后开始恢复执行。C++语言程序设计清华大学郑莉9例12-2异常处理时的析构#includeiostream.hvoidMyFunc(void);classExpt{public:Expt(){};~Expt(){};constchar*ShowReason()const{returnExpt类异常。;}};classDemo{public:Demo();~Demo();};Demo::Demo(){cout构造Demo.endl;}Demo::~Demo(){cout析构Demo.endl;}10voidMyFunc(){DemoD;cout在MyFunc()中抛掷Expt类异常。endl;throwExpt();}intmain(){cout在main函数中。endl;try{cout在try块中,调用MyFunc()。endl;MyFunc();}11catch(ExptE){cout在catch异常处理程序中。endl;cout捕获到Expt类型异常:;coutE.ShowReason()endl;}catch(char*str){cout捕获到其他的异常:strendl;}cout回到main函数。从这里恢复执行。endl;return0;}12程序运行时输出:在main函数中。在try块中,调用MyFunc()。构造Demo.在MyFunc()中抛掷Expt类异常。析构Demo.在catch异常处理程序中。捕获到Expt类型异常:Expt类异常。回到main函数。从这里恢复执行。13C++语言程序设计清华大学郑莉14小结与复习建议主要内容–异常处理的基本思想、C++异常处理的实现、异常处理中的构造与析构达到的目标–简单了解C++的异常处理机制实验任务–实验十二
本文标题:C++语言程序设计(清华大学郑莉)十二
链接地址:https://www.777doc.com/doc-5064084 .html