程序异常处理

程序异常处理

ID:34384173

大小:121.51 KB

页数:24页

时间:2019-03-05

程序异常处理_第1页
程序异常处理_第2页
程序异常处理_第3页
程序异常处理_第4页
程序异常处理_第5页
资源描述:

《程序异常处理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C++之异常处理一个好的程序应该能对多种不同的特殊情况,做出不同的反应,对于突发情况也应有对应的处理方法。我们在编程时应考虑到各种突发情况,并在程序中给出解决方案,使程序的健壮性增强。  假设有一个司机从A地开车前往B地。若在某处有一岔路口,一般选择左边,路程会近一些。但当司机选择左边,将车开到途中时发现正在修路(突发情况),无法通过。这时,司机就会掉头回到刚才的岔路口处,重新选择右边的路,继续前进。我们所编的程序也应该像这样,有一定的智能化的设计。这就要求在编写程序时,应该试着确定程序可能出现的错运,然后加入处理错误的代码。例如:当程序执行文件I/0操

2、作时,应测试文件打开以及读写操作是否成功,并且在出现错误时做出正确的反应。随着程序复杂性的增加,为处理错误而必须包括在程序中代码的复杂性也相应地增加了。  为使程序更易于测试和处理错误,C++实现了异常处理机制。一、 异常概念1.异常的概念    程序的错误,一种是编译错误,即语法错误。如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码。另一种是在运行时发生的错误,它分为不可预料的逻辑错误和可以预料的运行异常。  运行异常,可以预料,但不能避免,它是由系统运行环境造成的。如,内存空间不足,而程序运行中提出内存分配申请时,得不到满足,就会发生异

3、常: #include //…… voidf(char*str) {  ifstreamsource(str);//打开str串中的文件  if(source.fail())  //打不开  {cerr<<"Erroropeningthefile:"<

4、即中断运行,从而无条件释放所有资源。对于大型程序来说,运行中一旦发生异常,应该允许恢复和继续运行。  恢复的过程就是把产生异常所造成的恶劣影响去掉,中间可能要涉及一系列的函数调用链的退栈,对象的析构,资源的释放等。继续运行就是异常处理之后,在紧接着异常处理的代码区域中继续运行。  在C++中,异常是指从发生问题的代码区域传递到处理问题的代码区域的一个对象。见图 : 发生异常的地方在函数k()中,处理异常的地方在其上层函数f()中,处理异常后,函数k()和g()都退栈,然后程序在函数f()中继续运行。如果不用异常处理机制,在程序中单纯地嵌入错误处理语句,要

5、实现这一目的是艰难的。  异常的基本思想是:  (1)实际的资源分配(如内存申请或文件打开)通常在程序的低层进行,如图中的k()。  (2)当操作失败、无法分配内存或无法打开一个文件时.在逻辑上如何进行处理通常是在程序的高层,如图中的f(),中间还可能有与用户的对话。  (3)异常为从分配资源的代码转向处理错误状态的代码提供了一种表达方式。如果还存在中间层次的函数,如图中的g(),则为它们释放所分配的内存提供了机会,但这并不包括用于传递错误状态信息的代码。  从中可以看出,C什异常处理的目的,是在异常发生时,尽可能地减小破坏,周密地善后,而不去影响其它部

6、分程序的运行。-这在大型程序中是非常必要的。  例如对于以前所讲的程序调用关系,如处理文件打开失败异常的方法,那么,异常只能在发生的函数k()中进行处理,无法直接传递到函数f()中,而且调用链中的函数g()的善后处理也十分困难。二、异常的实现使用异常的步骤是:(1)定义异常(try语句块)将那些可能产生错误的语句框定在try语句中;(2)定义异常处理(catch语句块)将异常处理的语句放在catch块中,以便异常被传递过来时就处理它;(3)抛掷异常(throw语句)检测是否产生异常,若产生异常,则抛掷异常。例如,下面的程序,设置了防备文件打不开的异常:例

7、题1#include#include#includevoidmain(intargc,char**argv){ifstreamsource(argv[1]);//打开文件charline[128];try{if(source.fail())//如果打开失败throwargv[1];}catch(char*s){cout<<"erroropeningthefile"<

8、of(line));cout<

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

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

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