第12章异常处理PPT讲稿.ppt
《第12章异常处理PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第12章异常处理PPT讲稿.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第12章异常处理章异常处理第1页,共25页,编辑于2022年,星期日2本章主要内容本章主要内容l异常处理的基本思想异常处理的基本思想lC+异常处理的实现异常处理的实现l异常处理中的构造与析构异常处理中的构造与析构l标准程序库异常处理标准程序库异常处理l小结小结第2页,共25页,编辑于2022年,星期日3异常处理的基本思想异常处理的基本思想函数f()捕获并处理异常函数h()引发异常函数g()调用者异常传播方向调用关系异常处理的基本思想第3页,共25页,编辑于2022年,星期日4异常处理的执行过程异常处理的执行过程l抛掷异常的程序段抛掷异常的程序段.throw 表达式;.l捕获并处理异常的程序段
2、捕获并处理异常的程序段try 复合语句catch(异常声明)复合语句catch(异常声明)复合语句 保护段异常处理程序C+异常处理的实现第4页,共25页,编辑于2022年,星期日5异常处理的执行过程(续)异常处理的执行过程(续)l若有异常则通过若有异常则通过throwthrow操作创建一个异常对象并抛掷。操作创建一个异常对象并抛掷。l将可能抛出异常的程序段嵌在将可能抛出异常的程序段嵌在trytry块之中。控制通过正常的块之中。控制通过正常的顺序执行到达顺序执行到达trytry语句,然后执行语句,然后执行trytry块内的保护段。块内的保护段。l如果在保护段执行期间没有引起异常,那么跟在如果在保
3、护段执行期间没有引起异常,那么跟在trytry块后的块后的catchcatch子句就不执行。程序从子句就不执行。程序从trytry块后跟随的最后一个块后跟随的最后一个catchcatch子子句后面的语句继续执行下去。句后面的语句继续执行下去。lcatchcatch子句按其在子句按其在trytry块后出现的顺序被检查。匹配的块后出现的顺序被检查。匹配的catchcatch子子句将捕获并处理异常(或继续抛掷异常)。句将捕获并处理异常(或继续抛掷异常)。l如果匹配的处理器未找到,则运行库函数如果匹配的处理器未找到,则运行库函数terminateterminate将被自动将被自动调用,其缺省功能是调用
4、调用,其缺省功能是调用abortabort终止程序。终止程序。C+异常处理的实现第5页,共25页,编辑于2022年,星期日6例例12-1处理除零异常处理除零异常#include#include using namespace std;using namespace std;int divide(int x,int y)int divide(int x,int y)if(y=0)if(y=0)throw x;throw x;return x/y;return x/y;int main()int main()try try cout 5/2=divide(5,2)endl;cout 5/2=div
5、ide(5,2)endl;cout 8/0=divide(8,0)endl;cout 8/0=divide(8,0)endl;cout 7/1=divide(7,1)endl;cout 7/1=divide(7,1)endl;catch(int e)catch(int e)cout e is divided by zero!endl;cout e is divided by zero!endl;cout That is ok.endl;cout That is ok.endl;return 0;return 0;程序运行结果如下:程序运行结果如下:5/2=25/2=28 is divided
6、by zero!8 is divided by zero!That is ok.That is ok.C+异常处理的实现第6页,共25页,编辑于2022年,星期日7异常接口声明异常接口声明l可以在函数的声明中列出这个函数可可以在函数的声明中列出这个函数可能抛掷的所有异常类型。能抛掷的所有异常类型。例如:void fun()throw(A,B,C,D);l若无异常接口声明,则此函数可以抛若无异常接口声明,则此函数可以抛掷任何类型的异常。掷任何类型的异常。l不抛掷任何类型异常的函数声明如下:不抛掷任何类型异常的函数声明如下:void fun()throw();C+异常处理的实现第7页,共25页,编
7、辑于2022年,星期日8异常处理中的构造与析构异常处理中的构造与析构l找到一个匹配的找到一个匹配的catch异常处理后异常处理后初始化异常参数。将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的所有自动对象进行析构。从最后一个catch处理之后开始恢复执行。异常处理的构造与析构第8页,共25页,编辑于2022年,星期日9例例12-2 异常处理时的析构异常处理时的析构#include#include#include#include using namespace std;using namespace std;class MyException class MyException pu
8、blic:public:MyException(const string&message):MyException(const string&message):message(message)message(message)MyException()MyException()const string&getMessage()const return const string&getMessage()const return message;message;private:private:string message;string message;异常处理的构造与析构第9页,共25页,编辑于20
9、22年,星期日class Demo class Demo public:public:Demo()cout Constructor of Demo Demo()cout Constructor of Demo endl;endl;Demo()cout Destructor of Demo Demo()cout Destructor of Demo endl;endl;void func()throw(MyException)void func()throw(MyException)Demo d;Demo d;cout Throw MyException in func()endl;cout T
10、hrow MyException in func()endl;throw MyException(exception thrown by throw MyException(exception thrown by func();func();10第10页,共25页,编辑于2022年,星期日int main()int main()cout In main function endl;cout In main function endl;try try func();func();catch(MyException&e)catch(MyException&e)cout Caught an exce
11、ption:cout Caught an exception:e.getMessage()endl;e.getMessage()endl;cout Resume the execution of main()endl;cout Resume the execution of main()endl;return 0;return 0;11第11页,共25页,编辑于2022年,星期日程序运行时输出程序运行时输出:In main functionConstructor of DemoThrow MyException in func()Destructor of DemoCaught an exce
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 异常 处理 PPT 讲稿
限制150内