1、第 11 章 异常处理111 本章提要(1) 异常处理是 C+提供的一种捕获和处理程序错误的结构化机制。异常的常见例子有 new 无法取得所需内存、数组下标越界、运算溢出、除数为 0 以及函数的无效参数等。(2) 异常处理通过关键字 throw、try 和 catch 实现。try 块中放置出错时产生异常的代码,try 块后面是一个或多个 cateh 块(称为异常处理器)。每一个 catch块处理一种类型的异常。throw 语句用在被调用函数中抛出异常。异常匹配仅与异常的类型有关。(3) 发生异常之后,控制不会返回异常抛出点。程序执行相应 catch 块,然后跳过所有后续 catch 块恢复执
2、行。(4) 异常指定可以用参数形式声明一个函数允许抛出的异常类型。(5) 一个异常处理程序如果不能确定异常的处理方式,可以在 catch 块中在把异常抛给上一级调用函数。(6) 异常处理应用于大型项目中以统一方式处理整个项目的异常。112 程序举例在异常处理机制中,throw 语句抛出异常,catch 语句捕获异常,异常匹配仅与异常的类型有关。下面是一个多种异常类型匹配的例子。例 11-1 不同类型的异常测试/ch11_1.cpp 不同类型的异常测试#include int test(char* p,double e,int a)int flag=1;try /检测异常if(*p=0if (a
3、70)throw a;catch(char s) /捕获处理异常flag=0;coutpasswordearningsage;if(test(password,earnings,age)coutvoid fun(int,double);void test(int,double) throw(int,double); /指定异常const int intMax=10000;const double floatMax=1e12;void main()fun(10200,3.14);fun(2323,1.2e20);void fun(int k,double x)trytest(k,x);catch
4、(int)coutintMax) throw a;if(xfloatMax) throw x;运行结果:Integer data is too large.Float data is too large.在 这 个 例 子 中 , 主 函 数 main()调 用 函 数 fun(),又 由 fun()调 用 函 数 test()。函 数 test()抛 出 int 和 double 类 型 的 异 常 。 函 数 fun()捕 获 test()抛 出 的 异 常 并进 行 处 理 。113 习题举例一、阅读下列程序,说出输出结果1. 程序如下/ch11_ex1_1.cpp#include in
5、t Div(int x,int y)if(y=0)throw y;return x/y;void main()trycoutvoid fun();class Exptpublic:Expt() Expt() const char * Why() const return “Expt“; ;class Testpublic:Test() cout#include void fun();class Testpublic:Test()cout#include void funl();void fun2();void fun3();class Exptpublic:Expt() Expt() cons
6、t char * Why() const return “Expt “; ;class Messagepublic:Message(const char* s)msg=new charstrlen(s)+ 1;strcpy(msg,s);cout“Constructor: “msgendl;Message()cout“Destructor: “msgendl;delete msg;private:char *msg;void main()funl();void funl()Message m(“funl()“);tryfun2();catch(const Exptvoid fun2()Mess
7、age m(“fun2()“);fun3();void fun3()Message m(“fun3()“);cout“l am ready to throw an exception“endl;throw Expt();二、编程题1. 设计一个 Exception 抽象类,在此基础上派生一个 OutOfMemory 类响应内存不足,一个 RangeError 类响应输入的数不在指定范围内。114 上机练习题及上机指导11.4.1 上机要求1. 上机调试关于异常处理的例子,理解异常的捕获、匹配与再抛出,掌握异常处理机制的功能和使用方法。2. 上机调试相关例子,理解掌握异常处理中的构造与析构。11.4.2 上机练习题及指导1 上机调试本书例 11-1 中程序,熟悉一般异常处理。2 上机调试本书例 11-2 中程序,熟悉抛出列表的使用。3 上机调试教材中的例 11-3,掌握异常处理中的构造与析构。