异常处理的原理

传统的错误处理是用不同的数值来表示不同类型的错误,其表达能力很有限,因为一个数字包含的信息量太少,而C++异常处理机制将异常类型化,显然一个类型要比一个数字包含的信息量大得多。

     比如我们常用的函数fopen(),当打开文件失败是返回NULL,按照传统的错误处理方法,在调用Fopen()后立即检查其返回值,如果为NULL就进行错误处理,如果将返回NULL改为抛出异常OpenFailed,那么我们就不用在调用fopen()后马上检查返回值,而是在调用函数内部或者更高层的调用者那里设置异常处理器来捕获这个异常,C++保证:如果一个异常在抛出点没有得到处理,那么它将一直抛向上层调用者,直至main()函数,直到找到一个类型匹配的异常处理器,否则调用terminate()结束程序。

  可以看出:异常处理机制实际上是一种运行时通知机制。

 Class DevidedByZero{};

 Double Devide(double a,double b)

  {

If(abs(b)<std::numeric_limits<double>::epsilon())

 {

    Throw DevidedByZero(); //提前检测异常发生条件并抛出自定义异常

     Return a/b;             //这才是可能真正发出错误的地方

}

Void test()

  {

  Double x=100,y=20.5

  Try{

    Cout<<Devide(x,y)<<endl;  //抛出异常DevidedByZero

}

Catch(DevidedByZero&){

  Cerr<< “ Devided by zero!”<<endl;

}

}

扩展阅读:

  异常处理的语法结构http://www.lirenedu.org/index.php?ack=xinwen&id=1166

如何使用好异常处理技术:http://www.lirenedu.org/index.php?ack=xinwen&id=1161

posted on 2012-08-22 10:01  yetta2011  阅读(231)  评论(0)    收藏  举报

导航