C课件第12章异常处理

C课件第12章异常处理

ID:46940600

大小:329.81 KB

页数:16页

时间:2019-11-30

C课件第12章异常处理_第1页
C课件第12章异常处理_第2页
C课件第12章异常处理_第3页
C课件第12章异常处理_第4页
C课件第12章异常处理_第5页
资源描述:

《C课件第12章异常处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章异常处理本章要点:异常处理的概念和基本思想;C++异常处理的实现方法;C++异常处理中的构造与析构;本章内容12.1异常处理机制12.2异常处理的实现12.3异常处理中的构造与析构12.4应用举例异常处理机制(1)异常的概念异常就是程序在运行的过程中,由于使用环境的变化以及用户的不当操作而产生的错误。例如,内存不足时,应用程序请求分配内存;请求打开硬盘上不存在的文件;程序中出现了以零为除数的错误;打印机未打开,调制解调器掉线等,导致程序运行中挂接这些设备失败等等,都会引发异常。对这些错误,应用程序如果不能进

2、行合适的处理,将会使程序变得非常脆弱,甚至不可使用。因此,对于这些可以预料的错误,在程序设计时,应编制相应的预防代码或处理代码,以便防止异常发生后造成严重后果。一个应用程序,既要保证其正确性,还应有容错能力,也就是说,既要在正确的应用环境中、用户操作正确时运行正常、正确,而且要在应用环境出现意外或用户操作不当时,也应有合理的反应。在C++中,异常是指从发生问题的代码区域传递到处理问题的代码区域的一个对象。异常处理机制(2)异常处理的基本思想1.小型程序在出现异常时,一般是将程序立即中断运行,无条件释放所有资源。如:

3、例12.1以下程序当除数为零时,停止运行并给出提示信息#include#includedoublefuc(doublex,doubley){if(y==0){cerr<<"errorofdividingzero.";exit(1);}returnx/y;}voidmain(){fuc(2,3);fuc(4,0);}当除数为零时给出提示信息并停止运行异常处理机制(3)2.大中型程序中,上述处理方法就过于简单粗糙。这是因为在大中型程序中,函数之间有着明确的分工和复杂的调用

4、关系。发现错误的程序往往在函数调用链的低层,这样,简单地在发现错误的函数中处理异常,就没有机会把调用链中的上层函数已经完成的一些工作做妥善的善后处理。例如,上层函数已经申请了堆对象,那么释放堆对象的工作显然不能在底层函数中处理,从而使程序不能正常运行。因此,对于大中型程序来说,在程序运行中一旦发生异常,应该允许恢复和继续运行。恢复是指把产生异常的错误处理掉,中间可能要涉及一系列函数调用链的退栈,对象的析构,资源的释放等。继续运行是指异常处理之后,在紧接着异常处理的代码区域中继续运行。异常处理机制(4)处理异常的基本

5、思想是:在底层发生的问题,逐级上报,直到有能力可以处理异常的那级为止。即在应用程序中,若某个函数发现了错误并引发异常,这个函数就将该异常向上级调用者传递,请求调用者捕获该异常并处理该错误。如果调用者不能处理该错误,就继续向上级调用者传递,直到异常被捕获错误被处理为止。如果程序最终没有相应的代码处理该异常,那么该异常最后被操作系统所接受,操作系统就简单地终止程序运行。如右图:称为函数调用链只在调用链中传递异常!成为异常处理链异常处理的实现(1)C++异常处理的步骤是:1.定义异常(try语句块)try{//将可能产生

6、异常的语句放在try语句块中}2.定义异常处理(catch语句块)将处理异常的语句放在catch语句块中,以便异常被传递来时处理。通常,异常处理是紧接在try语句块后的若干个相邻的catch语句,每一个catch语句的格式是:catch(异常类型1){//异常处理语句块1}异常处理的实现(2)3.抛弃异常(throw语句)检测是否产生异常,若是,则抛弃异常。抛弃异常语句的格式是:throw表达式;…throw表达式…try{可能出现异常的语句块}catch(异常类型声明1){异常处理语句块1}catch(异常类型声

7、明2){异常处理语句块2}…catch(异常类型声明n){异常处理语句块n}如果到此处还没有找到,则将异常交给本语句所在函数的调用者。如果表达式的类型和异常类型2相同或相容,执行相应语句后转到第n个catch之后如果此处有其他语句,则不进行匹配查找如果此处有其他语句,则停止匹配查找异常处理的实现(3)例12.2处理文件打不开的异常#include#include#includevoidmain(){ifstreamsource("c:abc.txt

8、");//打开文件charline[128];try//定义异常{if(source.fail())throw"abc.txt";//抛掷异常}catch(char*s)//定义异常处理{cout<<"erroropeningthefile"<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。