第十章 异常处理和跟踪调试.ppt
文本预览下载声明
10.1.2 异常的实现及基本规则 C++异常处理机制 C++标准库提供了 exception 的类, 它是所有标准库异常类的父类exception有一个virtual 函数 what(), 它返回一个字符串描述异常类型. 参考代码 std_exception.cpp * 在处理程序和语句之间的相互作用使异常在大型应用程序中变得复杂。 通常人们希望抛掷被及时捕获,以避免程序突然终止。 此外,跟踪抛掷很重要,因为捕获确定该程序的后继进展 例如,抛掷和捕获可以用来重新开始程序内的一个过程 或者从应用程序的一部分跳到另一部分 或者回到菜单。 * 在处理程序和语句之间的相互作用使异常在大型应用程序中变得复杂。 通常人们希望抛掷被及时捕获,以避免程序突然终止。 此外,跟踪抛掷很重要,因为捕获确定该程序的后继进展 例如,抛掷和捕获可以用来重新开始程序内的一个过程 或者从应用程序的一部分跳到另一部分 或者回到菜单。 * * 在处理程序和语句之间的相互作用使异常在大型应用程序中变得复杂。 通常人们希望抛掷被及时捕获,以避免程序突然终止。 此外,跟踪抛掷很重要,因为捕获确定该程序的后继进展 例如,抛掷和捕获可以用来重新开始程序内的一个过程 或者从应用程序的一部分跳到另一部分 或者回到菜单。 模板的概念 模板函数 类模板 标准模板库 第十章 异常处理和跟踪 预习检查 捕获异常的关键字是什么? 举出一个异常的例子? * 本章结构 异常概念 异常处理和跟踪调试 异常的实现和基本规则 异常的基本思想 多路捕捉 异常处理机制 使用异常的方法 10.1 异常概念 程序的错误,一种是编译错误,即语法错误 另一种是在运行时发生的错误 不可预料的逻辑错误 逻辑错误是由于不当的设计造成的 可以预料的运行异常 运行异常.可以预料,但不能避免,它是由系统运行环境造成的。 然而这些错误是能够预料的,通常加入一些预防代码便可防止这些异常 10.1.1异常处理的基本思想 函数f()捕获并处理异常 函数h() 引发异常 函数g() …… 调用者 异常传播方向 调用关系 10.1.1 异常处理的基本思想 抛掷异常的程序段 捕获并处理异常的程序段 ...... throw 表达式; ...... try 复合语句 catch(异常类型声明) 复合语句 catch(异常类型声明) 复合语句 … int main() { cout “Start\n”; try { cout “Inside try block\n”; throw 100; //抛出异常 cout “This will not execute”; } catch(int i){ //捕获异常 cout “Caught an exception – value is: ”; cout i endl; } catch(…){ cout “ default ” endl; } cout “End”; return 0; } 10.1.2 异常的实现及基本规则 异常处理机制 #includeiostream.h int Div(int x,int y); int main() { try { cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout7/1=Div(7,1)endl; } catch(int) { coutexcept of deviding zero.\n; } coutthat is ok.\n; } int Div(int x,int y) { if(y==0) throw y; return x/y; } 程序运行结果如下: 5/2=2 except of deviding zero. that is ok. 10.1.2 异常的实现及基本规则 编写异常处理程序的规则是 任意数量的catch分程序立即出现在try分程序之后。 在catch行的圆括号中可包含数据类型声明 如果一个函数抛掷一个异常, 但在通往异常处理函数的调用链中找不到与之匹配的catch,则该程序通常以abort()函数调用终止 10.2 多路捕捉 多数程序可能有若干不同种类的运行错误,它们可以用异常处理机制。 每种错误可与一个类、一个数据类型或一个值有关。这样,在程序中就会出现多路捕获。 10.2 多路捕捉 class Range { /
显示全部