使用try/catch捕获异常

在C++中,提供了语句try/catch来捕获异常,其中,try和catch分别用于定义异常和定义异常处理。定义异常是将可能产生错误的语句放在try语句块中。其格式是:
try
{
    可能产生错误的语句
}
定义异常处理是将异常处理的语句放在catch语句块中,以便异常被传递来时处理。通常,异常处理是放在try语句块后的由若干个catch语句组成的程序,其格式是:
catch(异常类型声明1)
{
    异常处理语句块1
}
catch(异常类型声明2)
{
    异常处理语句块2
}
……
catch(异常类型声明n)
{
    异常处理语句块n
}
例如,下列语句使用try/catch捕获异常,并定义捕获后对异常的处理。
try
{
    string str = null;                                //定义字符串对象
    ProcessString(str);                                //执行某个函数
}
catch (Exception e)                                    //定义对异常的处理
{
    cout<<”Process is error”;
    exit(1);                                            //异常退出程序
}

提示:在使用catch语句定义对异常的处理时,其中的参数可以只为某个数据类型,如catch(int)的形式,在具体的环境中其类型不同。

 

 

 

例如:

1.  
  try  
  {  
  NMFTP->Upload("a.txt","a.txt");  
  }  
  catch(Exception   &E)//E表示程序自己的英文错误提示信息  
  {  
          ShowMessage("你的中文提示信息"+E.Message);//E.Message表示程序的错误,前面一个给用户看的提示,后面的是你找错的提示  
  }  
   
  2.  
  try  
  {  
  NMFTP->Download("a.txt","a.txt");  
  }  
  catch(Exception   &E)  
  {  
          ShowMessage("你的中文提示信息"+E.Message);//E.Message表示程序的错误,前面一个给用户看的提示,后面的是你找错的提示  
  }  

 

 

 

 

 

 

 

try  
  {  
  //正常代码  
  }  
  catch(错误类或是...)  
  {  
  //异常处理代码,当出现catch中的异常时运行  
  }  
  __finally  
  {  
  //异常处理代码,无论是否出现异常都运行。  
  }

 

BCB中提供的异常处理分C++与WIN32的,  
  前者由try{}catch(){}组成,由throw触发,这种异常是C++语言相关的,VCL异常也由此实现.  
  后者用以支持WIN32异常,这是与操作系统相关的,由try{}__except(){}或try{}__finally{}组成,由RaiseException   函数触发.  
  以上三种结构可以嵌套使用但不能随意搭配.VirusHuo说的结构好象不对少写了一个try{}.  
  __finally块就是指不管是否有异常发生总是要执行的.  

 

也可以释放你所申请的资源.如  
  try  
  {  
      TButton   *p=new   TButton(this);  
      ...    
  }  
  __finally  
  {  
      delete   p;  
  }  
  不管是不是出错,都要执行delete

你可能感兴趣的:(C++编程技巧)