C++异常处理 http://blog.csdn.net/oury

来源:互联网 发布:数控编程用什么软件好 编辑:程序博客网 时间:2024/04/30 06:49

在讨论C++异常处理之前,先看看一个C语言编程中常见的例子:

#include <stdio.h>

FILE *fp;

Fp=fopen(“test.txt”,”r”);

If(fp==NULL)

{

  printf(“Can’t Open File!/n”);

  exit(0);

}

一个健壮的程序需要考虑很多会使程序失效的因素,如果对各种因素都进行如上的条件判断,那么整个程序的结构就会变得非常混乱。

C++处理错误的方法由不一样,它有如下特点:

1、  不需要打乱程序的结构,如果没有任何错误产生,那么程序的运行应该不受任何影响。

2、  不依靠函数的返回值来报告错误是否产生。

3、  即使采用集中的方式处理错误,也能够根据错误种类的不同来进行对应的错误处理操作。

下面来看看C++中提供的异常机制是如何做到这几点的。

///---------------------------------------------------------------------------

#include <iostream.h>

#include <vcl.h>

#pragma hdrstop

 

///---------------------------------------------------------------------------

 

#pragma argsused

int main(int argc, char* argv[])

{

  double *data;

  try

  {

    data=new double[1000];

  }

  ////std::bad_alloc是new操作符唯一可能发出的异常

  catch(std::bad_alloc)

  {

    cout<<"can't alloc memory!"<<endl;

    exit(0);

  }

  ////捕获所有剩下的异常

  catch(...)

  {

  }

  delete []data;

  ShowMessage("ok");

        return 0;

}

///---------------------------------------------------------------------------

使用异常的语法很简单,对所有可能产生异常的语句包含在try块中,并在随后的catch语句中捕获发生的异常。一个try块后可以跟随几个不同的catch语句,用来捕获不同的异常。如果希望捕获任何可能发生的异常,应该使用catch(…)语句。如果希望在自己编写的程序中产生异常,可以按如下的方法:

///---------------------------------------------------------------------------

#include <iostream.h>

#include <vcl.h>

#pragma hdrstop

 

///---------------------------------------------------------------------------

 

#pragma argsused

class Out{};

int main(int argc, char* argv[])

{

  try

  {

    throw Out();  ///抛出一个临时的Out对象

  }

  catch(Out& e) ///捕获Out异常

  {

    cout<<"Out Exception throwed!"<<endl;

    throw;   ///向外层抛出异常

  }

        return 0;

}

///---------------------------------------------------------------------------

利用关键字throw可以抛出任意的对象。这个对象不需要继承exception类。即使是基本类型数据,也可以作为throw的参数抛出。在catch的参数中如果包含一个类似变量声明的表达式,就可以在catch块中使用这个异常对象。如果在catch块中处理完一个异常后,异常造成的后果并不能完全消除,那么可以在catch语句中再次调用catch语句,从而使得捕获向外层传播。如果一个函数中没有处理发生的异常,那么异常将会传播到调用此函数的代码段中。
正文 

原创粉丝点击