第十章异常处理 异常处理机制是用于管理程序运行期间出现的非正常情况 的一种结构化方法 本章主要内容 异常的概念 2.异常的捕获与处理
15:26:27 第十章 异常处理 ➢异常处理机制是用于管理程序运行期间出现的非正常情况 的一种结构化方法 本章主要内容 1. 异常的概念 2. 异常的捕获与处理
5:26:7 §1异常的概念 >异常指程序运行期间出现的不正常的情况,与程序的错误 是相关的概念 程序的错误 编译错误:语法错误 ≯运行结果错误:语义错误 >异常错误(bug) 大多数情况下,程序能够正常运行且能得出正确结果,只 在极少数极端情况下,程序无法正常运行或运行结果不正 确
15:26:27 §1 异常的概念 ➢异常指程序运行期间出现的不正常的情况,与程序的错误 是相关的概念 ➢程序的错误 ➢编译错误:语法错误 ➢运行结果错误:语义错误 ➢异常错误(bug) 大多数情况下,程序能够正常运行且能得出正确结果,只 在极少数极端情况下,程序无法正常运行或运行结果不正 确
5:26:7 传统的处理方法:就地处理 >在程序中可能引起问题的地方进行判断,如果条件成立就 马上处理 一般模式为:if(条件){处理语句} 6]: int spInt=new int [100001 if (pInt==NULL) cout<<“ Cannot allocate memory”<<endl; exit(O) ese{正常功能语句;} 存在的问题: 1.类或函数创建者无法确定客户程序员想如何处理该异常 2.客户程序员知道如何处理该异常,却没有机会处理 3.错误处理代码掺杂于功能实现代码中,降低了可读性
15:26:27 ➢传统的处理方法:就地处理 ➢在程序中可能引起问题的地方进行判断,如果条件成立就 马上处理 例:int *pInt=new int[10000]; if(pInt==NULL) { cout << “Cannot allocate memory” << endl; exit(0); } else{ 正常功能语句;} 存在的问题: 1.类或函数创建者无法确定客户程序员想如何处理该异常 2.客户程序员知道如何处理该异常,却没有机会处理 3.错误处理代码掺杂于功能实现代码中,降低了可读性 ➢一般模式为:if(条件){处理语句}
5;26:7 §2异常的捕获与处理 >C++的异常处理通过 throw、try和 catch3个关键字实现 一般处理模式为 函数或类的创建者在被调用函数中检测到异常条件成立, 用 throw抛出一个异常;在客户程序员写的上层主调函数中 使用try检测该函数调用是否引发异常,被检测到的各种异 常由 catch捕获并作相应处理
15:26:27 §2 异常的捕获与处理 ➢C++的异常处理通过throw、try 和 catch 3个关键字实现 ➢一般处理模式为 函数或类的创建者在被调用函数中检测到异常条件成立, 用throw抛出一个异常;在客户程序员写的上层主调函数中 使用try检测该函数调用是否引发异常,被检测到的各种异 常由catch捕获并作相应处理
5:26:7 throw语句的一般形式为 throw表达式; 其中表达式表示一个异常的值,可以是任意类型的对象 异常检测与捕获处理的一般形式为 try //语块 catch(参数声明n) catch(参数声明1) //异常处理n /异常处理1 catch(. catch(参数声明2) //异常处理2 //异常处理n+1 参数声明的形式为: 类型参数或类型&参数
15:26:27 ➢throw语句的一般形式为 throw 表达式; 其中 表达式 表示一个异常的值,可以是任意类型的对象 ➢异常检测与捕获处理的一般形式为 try{ //语句块 } catch(参数声明1) {//异常处理1 } catch(参数声明2) {//异常处理2 } … catch(参数声明n) { //异常处理n } catch(…) { //异常处理n+1 } 参数声明的形式为: 类型 参数 或 类型& 参数