面向对象程序设计第十二章异常处理机制精选PPT.ppt

上传人:石*** 文档编号:43310057 上传时间:2022-09-17 格式:PPT 页数:29 大小:1.57MB
返回 下载 相关 举报
面向对象程序设计第十二章异常处理机制精选PPT.ppt_第1页
第1页 / 共29页
面向对象程序设计第十二章异常处理机制精选PPT.ppt_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《面向对象程序设计第十二章异常处理机制精选PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计第十二章异常处理机制精选PPT.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象程序设计第十二章异常处理机制第1页,此课件共29页哦 本章主要内容:本章主要内容:异常处理的任务与思想异常处理的任务与思想异常处理的实现异常处理的实现异常处理的应用异常处理的应用异常处理中的构造与析构异常处理中的构造与析构C+标准异常类标准异常类第2页,此课件共29页哦10.1 异常处理的任务与思想异常处理的任务与思想 软软件件不不仅仅要要保保证证能能正正确确完完成成任任务务,还还应应当当具具有有良良好好的的容错性容错性。容容错错性性是是指指软软件件不不仅仅在在正正确确操操作作的的条条件件下下能能正正确确运运行行,而而且且当当环环境境异异常常或或不不当当使使用用时时,依依然然能能合合理

2、理处处理理运运行行过过程程中中的的出出现现的的各各种种异异常常,而而不不会会产产生生各种意想不到的后果。各种意想不到的后果。程序中的各种异常通过分析完全可以预料程序中的各种异常通过分析完全可以预料。根根据据异异常常的的不不同同情情况况进进行行对对异异常常进进行行处处理理,如如给给出出提提示示信信息息、允允许许用用户户排排除除环环境境错错误误、继继续续运运行行程程序序等都是异常处理的基本任务。等都是异常处理的基本任务。第3页,此课件共29页哦1.传统的异常处理方法传统的异常处理方法 传统程序设计方法中,通常采用系统提供的中断函数传统程序设计方法中,通常采用系统提供的中断函数或指令。或指令。当被调

3、用函数发生异常或产生错误时,返回一个特定的当被调用函数发生异常或产生错误时,返回一个特定的值,以便调用函数检测错误标志,并作出处理;或当值,以便调用函数检测错误标志,并作出处理;或当错误产生时,释放所有资源,结束程序运行错误产生时,释放所有资源,结束程序运行第4页,此课件共29页哦常用中断函数或指令常用中断函数或指令 函数原型函数原型/指令指令功功能能头文件头文件voidabort()中断程序执行,返回主中断程序执行,返回主C+窗口窗口stdlib.hvoidassert(表达式表达式)若表达式的值为若表达式的值为false则中断程序执行,则中断程序执行,并显示中断所在的文件和所在行号并显示中

4、断所在的文件和所在行号assert.hvoidexit(状态状态)中断程序执行,返回退出代码(状态中断程序执行,返回退出代码(状态值)值)stdlib.hreturn表达式表达式终止函数执行终止函数执行,返回表达式的值返回表达式的值第5页,此课件共29页哦l#includeldoublediv(double,double);lvoidmain()lldoublex,y;lcouty;lcoutx;lif(x=0)lcoutDividedbyzero,Error!endl;lelsellcoutq=div(x,y)endl;llcoutEndoftheprogram.endl;lldoubled

5、iv(doublex,doubley)llreturny/x;l传统异常处理方法的优点是异常传统异常处理方法的优点是异常处理直接,系统运行开销少,适处理直接,系统运行开销少,适用于处理简单的局部错误与异常。用于处理简单的局部错误与异常。不足之处是异常处理代码分布于程不足之处是异常处理代码分布于程序中可能出错的各个地方,异常处序中可能出错的各个地方,异常处理代码与系统功能实现代码混在一理代码与系统功能实现代码混在一起,降低程序的可读性与可维护性,起,降低程序的可读性与可维护性,不适合大型软件的开发,也不符合不适合大型软件的开发,也不符合现代软件工程的理念现代软件工程的理念第6页,此课件共29页哦

6、2.C+异常处理机制异常处理机制在在大大型型软软件件中中,由由于于函函数数之之间间具具有有各各自自明明确确的的分分工工并并可可能能存存在在调调用用关关系系,发发生生错错误误的的函函数数可可能能不不便便于于或或不不具具备备处处理理错错误误的条件。的条件。C+异异常常处处理理机机制制的的基基本本思思想想是是将将异异常常检检测测与与异异常常处处理理分分离离。产产生生异异常常的的函函数数不不一一定定需需要要具具备备异异常常处处理理的的能能力力,当当一一个个函函数数发发生生异异常常时时,它它抛抛出出所所发发生生的的异异常常或或错错误误,由由调调用用者者捕捕获获或或处处理理异异常常,若若上上层层调调用用函

7、函数数仍仍不不便便于于处处理理异异常常,还还可可以以进进一一步步抛抛出异常,按调用层次关系传递给更上一层处理。出异常,按调用层次关系传递给更上一层处理。第7页,此课件共29页哦2.C+异常处理机制异常处理机制函数函数f()f()捕获并处理异常捕获并处理异常函数函数h()h()引发异常引发异常函数函数g()g()调用者调用者异常传播方向异常传播方向调用关系调用关系第8页,此课件共29页哦10.2 C+异常处理的实现异常处理的实现 C+语言提供了对异常处理机制的内部支持语言提供了对异常处理机制的内部支持由由try、throw和和catch语句提供了语句提供了C+用于实现异用于实现异常处理的机制。常

8、处理的机制。在异常处理机制的支持下,可以更合理、更有在异常处理机制的支持下,可以更合理、更有效的处理程序运行过程中存在的各种异常现象。效的处理程序运行过程中存在的各种异常现象。第9页,此课件共29页哦1.异常处理的语法异常处理的语法try-throw-catch是是C+异常处理机制的实现语句;异常处理机制的实现语句;程序中可能产生异常的部分应包含于程序中可能产生异常的部分应包含于try块之中;块之中;异常由紧随其后的异常由紧随其后的catch语句捕获和处理;语句捕获和处理;throw语句的作用是抛出异常。语句的作用是抛出异常。第10页,此课件共29页哦异常处理程序的使用形式异常处理程序的使用形

9、式try语句;语句;catch(类型类型1参数参数1)与类型与类型1相关的异常处理语句;相关的异常处理语句;catch(类型类型2参数参数2)与类型与类型2相关的异常处理语句;相关的异常处理语句;catch(类型类型n参数参数n)与类型与类型n相关的异常处理语句;相关的异常处理语句;throw表达式使用格式如下:表达式使用格式如下:throw表达式;表达式;第11页,此课件共29页哦 try try语句块实际上是程序代码的保护段,表明该程序语句块实际上是程序代码的保护段,表明该程序段在执行过程中可能会产生异常或出现错误;段在执行过程中可能会产生异常或出现错误;若预料某段程序代码或某个函数可能发

10、生异常或错误,若预料某段程序代码或某个函数可能发生异常或错误,就应当将之置于就应当将之置于trytry语句块之内;语句块之内;一旦该代码段或函数在调用过程中产生了异常情况,一旦该代码段或函数在调用过程中产生了异常情况,throwthrow语句将抛出这个异常,并通过语句将抛出这个异常,并通过throwthrow之后的表达式之后的表达式返回一个值;返回一个值;有关说明有关说明第12页,此课件共29页哦当函数出现了自己不能处理的异常,就可以使用当函数出现了自己不能处理的异常,就可以使用“throw throw 表达式表达式”将异常抛出;将异常抛出;throwthrow之后的之后的“表达式表达式”表示

11、异常类型,它在语法上与表示异常类型,它在语法上与returnreturn语句的语句的“表达式表达式”值类似;值类似;throwthrow语句表达式的值不能用来区分不同异常,所以当语句表达式的值不能用来区分不同异常,所以当程序将要抛出多个异常,应该用不同类型的表达式值相程序将要抛出多个异常,应该用不同类型的表达式值相互区别;互区别;有关说明有关说明(续续)第13页,此课件共29页哦catchcatch语句块是异常处理的程序代码,捕获和处理由语句块是异常处理的程序代码,捕获和处理由“throw表达式表达式”所抛出的异常。所抛出的异常。catch catch 之后的异常类型可以是任何有效的数据类型,

12、它之后的异常类型可以是任何有效的数据类型,它与函数的形参类似,既可以是与函数的形参类似,既可以是 intint、floatfloat等某个类型值,等某个类型值,也可以是引用及也可以是引用及C+C+的类,它用于指定的类,它用于指定catchcatch语句块所处理的语句块所处理的异常的类型;异常的类型;当异常被抛出后,当异常被抛出后,catchcatch块依次被检查块依次被检查 ,若某,若某catchcatch语语句块的异常类型与被抛出的异常类型一致,则执行该异常句块的异常类型与被抛出的异常类型一致,则执行该异常处理程序段。处理程序段。有关说明有关说明(续续)第14页,此课件共29页哦在一个在一个

13、trytry语句块内,异常处理程序将按照它出现的位语句块内,异常处理程序将按照它出现的位置先后顺序进行检查。若找到一个匹配的异常类型,后面置先后顺序进行检查。若找到一个匹配的异常类型,后面的异常处理都将被忽略;的异常处理都将被忽略;如果异常类型声明是一个省略号如果异常类型声明是一个省略号()(),则表示,则表示catchcatch语句可以处理任何类型的异常;语句可以处理任何类型的异常;类型为省略号的类型为省略号的catchcatch处理程序必须是处理程序必须是trytry块的最后一块的最后一段处理程序。段处理程序。有关说明有关说明(续续)第15页,此课件共29页哦doublediv(doubl

14、ex,doubley)if(x=0)throwy;/若若x=0时时,抛出异常抛出异常returny/x;#includedoublediv(double,double);voidmain()doublex,y;try/try语句块语句块couty;coutx;coutq=div(x,y)endl;catch(double)/捕获异常捕获异常coutDividedbyzero,Error!endl;coutEndoftheprogram.endl;第16页,此课件共29页哦异常处理的执行过程异常处理的执行过程 通过正常的执行顺序直到通过正常的执行顺序直到try语句,然后执行语句,然后执行try块

15、内的保护段。块内的保护段。若保护段在执行期间没有产生异常,则若保护段在执行期间没有产生异常,则try语语句块后的句块后的catch块不会被执行,程序从最后一个块不会被执行,程序从最后一个catch语句块后面的语句继续执行。语句块后面的语句继续执行。第17页,此课件共29页哦异常处理的执行过程异常处理的执行过程(续续)若保护段在执行期间或保护段调用的任何函若保护段在执行期间或保护段调用的任何函数中数中(直接或间接的调用直接或间接的调用)有异常抛出,则从通过有异常抛出,则从通过throw操作数创建的对象中创建一个异常对象。然操作数创建的对象中创建一个异常对象。然后寻找后寻找catch语句块或一个能

16、处理任何类型异常的语句块或一个能处理任何类型异常的catch处理块。处理块。catch语句块按其出现的顺序被检查,语句块按其出现的顺序被检查,如果没有匹配的如果没有匹配的catch处理块,则继续检查下一个处理块,则继续检查下一个动态封闭的动态封闭的try块,直到最外层的封闭块,直到最外层的封闭try块被检查块被检查完。完。第18页,此课件共29页哦异常处理的执行过程异常处理的执行过程(续)若没有匹配的若没有匹配的catch处理块,则处理块,则terminate函数函数将被自动调用,而将被自动调用,而terminate函数的默认功能是调函数的默认功能是调用用abort函数终止程序。函数终止程序。

17、若有匹配的若有匹配的catch处理块,如果它通过值进行捕处理块,如果它通过值进行捕获,则其形参通过复制异常对象进行初始化。如果获,则其形参通过复制异常对象进行初始化。如果它通过引用进行捕获,则参量被初始化为指向异常它通过引用进行捕获,则参量被初始化为指向异常对象。在形参被初始化之后,对那些在与对象。在形参被初始化之后,对那些在与catch处处理器相对应的理器相对应的try块开始和异常抛出点之间创建、但块开始和异常抛出点之间创建、但尚未析构的所有自动对象进行析构,然后执行尚未析构的所有自动对象进行析构,然后执行catch处理程序。处理程序。第19页,此课件共29页哦多种异常的检测。多种异常的检测

18、。#includedoublejudgement(char*ptr,intag,doublesal);voidmain()charname20;doublesalary;intage;coutPleaseinputname:name;coutPleaseinputage:age;coutPleaseinputsalary:salary;if(judgement(name,age,salary)coutname=nameendl;coutage=ageendl;coutsalary=salaryendl;coutEndoftheprogram.endl;doublejudgement(char*

19、ptr,intag,doublesal)boollogic;logic=true;tryif(a16)throwag;if(s530)throwsal;catch(intag)logic=false;cout职工年龄小于职工年龄小于16岁,违反劳动法岁,违反劳动法!agendl;catch(doublesal)logic=false;cout工资低于本市最低工资工资低于本市最低工资530元,违反劳动元,违反劳动!salendl;returnlogic;第20页,此课件共29页哦C+程程序序设设计计中中经经常常发发生生函函数数调调用用,在在调调用用函函数数时时除除需需要要了了解解函函数数参参数数

20、值值和和返返回回值值类类型型之之外外,当当函函数数有有异异常常抛抛出出时时,还还需需要要知知道道函函数数抛抛出出异异常常的的方方式式,以以方方便便调调用用函函数数(主主调调函函数数)对对异异常常进进行行处处理理.函函数数异异常常接接口口的的声声明明进进一一步步提提高高了了程序的可读性。程序的可读性。异异常常的的抛抛出出、捕捕获获与与处处理理已已经经成成为为函函数数接接口口的的一一部部分分,因因此此,在在函函数数原原型型中中需需要要指指定定函函数数可可以以抛抛出出的的异异常类型。常类型。2.异常处理接口异常处理接口 第21页,此课件共29页哦1.指定异常类型指定异常类型类型类型函数名函数名(参数

21、表参数表)throw(A1,A2,An);函数原型声明表明可以抛出的异常类型为函数原型声明表明可以抛出的异常类型为A1,A2,An及这些类型的子类型异常。及这些类型的子类型异常。指定函数所抛出的异常的形式:指定函数所抛出的异常的形式:第22页,此课件共29页哦指定函数所抛出的异常的形式指定函数所抛出的异常的形式(续续)2.抛出任意类型异常抛出任意类型异常类型类型函数名函数名(参数表参数表);函数原型没有函数原型没有throw的说明,该函数可的说明,该函数可以抛出任意类型的异常。以抛出任意类型的异常。第23页,此课件共29页哦指定函数所抛出的异常的形式指定函数所抛出的异常的形式(续续)3.不抛出

22、异常不抛出异常类型类型函数名函数名(参数表参数表)throw();throw之后是一个空表,该函数原型声明表示该之后是一个空表,该函数原型声明表示该函数不抛出任何类型的异常。函数不抛出任何类型的异常。第24页,此课件共29页哦C+异常处理机制不仅能处理各种不同类型的异常处理机制不仅能处理各种不同类型的异常,而且能处理构造函数异常,即具有为抛出异异常,而且能处理构造函数异常,即具有为抛出异常前构造的所有局部对象自动调用析构函数的能力。常前构造的所有局部对象自动调用析构函数的能力。3.异常处理中的构造与析构异常处理中的构造与析构 第25页,此课件共29页哦#includevoidTestFun()

23、;classTestApublic:TestA()coutConstructingTestA.endl;TestA()coutDestructingTestAendl;voidDisplay()coutClassTestAException!endl;classTestBpublic:TestB();TestB();TestB:TestB()coutConstructingTestBendl;TestB:TestB()coutDestructingTestBendl;voidTestFun()TestBtb;coutThrowTestAException!endl;throwTestA();v

24、oidmain()coutNowEntermain()endl;trycoutNowCallTestFun()endl;TestFun();catch(TestAta)coutAnTestAExceptionOccurred!endl;ta.Display();catch(.)coutOtherExceptionOccurred!endl;coutReturnmain()endl;第26页,此课件共29页哦C+标准库提供了包括exception类在内的9个标准异常类exception类是异常类的基类,该类的成员函数都包含一个没有指定异常列表的throw()。:10.4 C+标准异常类标准异常类

25、 第27页,此课件共29页哦exception框架代码框架代码class exceptionpublic:exception()throw();exception(const exception&rhs)throw();/复制构造函数复制构造函数 exception&operator=(const exception&rhs)throw();virtual exception()throw()virtual const char*what()const throw();异异常常类类exception中中含含有有成成员员函函数数what(),该该函函数数可可以以被被exception类类及及该该

26、类类的的其其他他派派生生类类重重载载,用用于于返返回回一一个个描述异常的字符串常量。描述异常的字符串常量。第28页,此课件共29页哦练习练习练习练习试用试用试用试用trytry,catchcatch和和和和throwthrow语句实现求解实系数一元二次语句实现求解实系数一元二次语句实现求解实系数一元二次语句实现求解实系数一元二次方程的实数根。方程的实数根。方程的实数根。方程的实数根。1.1.系数自行输入系数自行输入系数自行输入系数自行输入2.a=02.a=0时抛出异常二次项系数异常,时抛出异常二次项系数异常,时抛出异常二次项系数异常,时抛出异常二次项系数异常,catchcatch语句块捕语句块

27、捕语句块捕语句块捕获异常并进行提示:该方程不是二次方程获异常并进行提示:该方程不是二次方程获异常并进行提示:该方程不是二次方程获异常并进行提示:该方程不是二次方程3.3.当方程没有实数根式产生异常,有当方程没有实数根式产生异常,有当方程没有实数根式产生异常,有当方程没有实数根式产生异常,有throwthrow抛出无实抛出无实抛出无实抛出无实数根异常,数根异常,数根异常,数根异常,catchcatch语句块捕获异常并进行提示:该方语句块捕获异常并进行提示:该方语句块捕获异常并进行提示:该方语句块捕获异常并进行提示:该方程没有实数根;程没有实数根;程没有实数根;程没有实数根;第29页,此课件共29页哦

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁