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++的异常处理机制实验任务–实验十二

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功