c++异常处理catch
来源:优易学  2011-12-11 16:22:03   【优易学:中国教育考试门户网】   资料下载   IT书店

  如果要想使一个catch block能抓获多种数据类型的异常对象的话,怎么办?C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。

  感性认识

  1、catch(…)到底是一个什么样的东东,先来个感性认识吧!看例子先:

  int main()

  {

  try

  {

  cout << "在 try block 中, 准备抛出一个异常." << endl;

  //这里抛出一个异常(其中异常对象的数据类型是int,值为1)

  throw 1;

  }

  //catch( int& value )

  //注意这里catch语句

  catch( …)

  {

  cout << "在 catch(…) block 中, 抛出的int类型的异常对象被处理" << endl;

  }

  }

  2、哈哈!int类型的异常被catch(…)抓获了,再来另一个例子:

  int main()

  {

  try

  {

  cout << "在 try block 中, 准备抛出一个异常." << endl;

  //这里抛出一个异常(其中异常对象的数据类型是double,值为0.5)

  throw 0.5;

  }

  //catch( double& value )

  //注意这里catch语句

  catch( …)

  {

  cout << "在 catch(…) block 中, double类型的异常对象也被处理" << endl;

  }

  }

  3、同样,double类型的异常对象也被catch(…)块抓获了。是的,catch(..)能匹配成功所有的数据类型的异常对象,包括C++语言提 供所有的原生数据类型的异常对象,如int、double,还有char*、int*这样的指针类型,另外还有数组类型的异常对象。同时也包括所有自定义 的抽象数据类型。例程如下:

  int main()

  {

  try

  {

  cout << "在 try block 中, 准备抛出一个异常." << endl;

  //这里抛出一个异常(其中异常对象的数据类型是char*)

  char* p=0;

  throw p;

  }

  //catch( char* value )

  //注意这里catch语句

  catch( …)

  {

  cout << "在 catch(…) block 中, char*类型的异常对象也被处理" << endl;

  }

  }

  int main()

  {

  try

  {

  cout << "在 try block 中, 准备抛出一个异常." << endl;

  //这里抛出一个异常(其中异常对象的数据类型是int[])

  int a[4];

  throw a;

  }

  //catch( int value[] )

  //注意这里catch语句

  catch( …)

  {

  cout << "在 catch(…) block 中, int[]类型的异常对象也被处理" << endl;

  }

  }

  4、对于抽象数据类型的异常对象。catch(…)同样有效,例程如下:

  class MyException

  {

  public:

  protected:

  int code;

  };

  int main()

  {

  try

  {

  cout << "在 try block 中, 准备抛出一个异常." << endl;

  //这里抛出一个异常(其中异常对象的数据类型是MyException)

  throw MyException();

  }

  //catch(MyException& value )

  //注意这里catch语句

  catch( …)

  {

  cout << "在catch(…) block中, MyException类型的异常对象被处理" << endl;

  }

  }

  对catch(…)有点迷糊?

  1、究竟对catch(…)有什么迷糊呢?还是看例子先吧!

  void main()

  {

  int* p = 0;

  try

  {

  // 注意:下面这条语句虽然不是throw语句,但它在执行时会导致系统

  // 出现一个存储保护错误的异常(access violation exception)

  *p = 13; // causes an access violation exception;

  }

 

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训