C++程序设计简明教程 王晓东 第10章 异常处理新.ppt
文本预览下载声明
第10章异常处理 10.1 概述 10.2 抛出异常 10.3 异常捕获 10.1 概述 程序员在编写程序时,应该充分考虑到各种可能出现的意外情况,有针对性地安排代码进行处理。 C++提供了专门用于处理错误的机制,称为异常处理(exception handling)。 错误类型 程序有可能出现的一类错误是语法错误,这可以在C++编译器的帮助下迅速排除;另一类是运行时发生的错误,又分为逻辑错误和运行异常。 逻辑错误是由于程序设计时考虑不周全,往往由用户操作错误而引发。 运行异常主要是由系统的运行环境造成的,例如堆内存空间不足,无法满足用户动态内存分配的请求。 异常机制 出现错误的模块往往不具备处理错误的能力,这时它就抛出一个异常,希望上层模块能够捕获并处理这个异常。 如果上层模块也不能处理这个异常,还可以继续向上传播,直到异常被专门的异常处理模块捕获并处理为止。 如果程序始终没有理会并处理这个异常,最终它会被C++系统捕获。 10.2 抛出异常 C++抛出异常的关键字是throw,其语法形式为: throw 表达式; throw语句的表达式与return语句的表达式在形式上相似。return语句返回表达式的值,throw语句主要返回表达式的类型,作为catch块分析和捕捉的依据。 异常规格声明 C++语言提供了异常规格声明。异常规格声明出现在函数的声明语句中,位于形参列表之后。其语法形式是: 类型 函数名(形参列表) throw(异常列表); void fun(int x) throw(A,B,C); 重新抛出异常 有时捕获到异常后,可能需要在程序中重新抛出刚刚捕获的异常。这时只需加入无表达式的throw语句即可。 catch(…) { … throw; } 10.3 异常捕获 编写C++程序时,一般在try块中列出可能出现异常的代码段,在紧随其后的catch块中安排处理异常的代码。 try块的作用是把throw语句和catch块建立关联,使得异常抛出后能够找到相应的异常处理部分。 try try { … throw(异常名); //抛出异常 … } catch catch(异常类型声明) { … } 说明 catch块必须紧跟在try块的后面。catch块可以有多个,以分别处理不同类型的异常。而且所有的catch块都必须是连续的。 如果catch的异常类型声明是省略号(…),则该catch块可以捕获任何还没有被处理的任何类型的异常。显然这样的catch块应该安排在try块之后,所有catch块的最后面。 案例 for(i=1;i=2;i++) { try { fun(i); } catch(int) { cout捕获整型异常!endl; } catch(double) { cout捕获双精度实型异常!endl; } } void fun(int i) { switch(i) { case 1:throw 1; case 2:throw 2.0; } } * *
显示全部