| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 339 人关注过本帖
标题:关于 异常处理
只看楼主 加入收藏
杰仔1997
Rank: 2
来 自:广东
等 级:论坛游民
帖 子:41
专家分:31
注 册:2011-6-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
关于 异常处理
书本介绍TRY时,没有什么例题参考。看得不是很明白,哪位懂的请发几个例子给我。。要简单些的
2011-06-16 22:31
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:10 
try里面的是一个程序块,你把可能发生异常的程序块放到try中执行,
如果真发生异常的话,try就把这个异常抛出,
这个抛出过程由throw进行,抛出异常后,
由紧跟在try块后的 catch 接收并解决这个异常

下面是一个解二次方程的例子:
#include<iostream>
#include<math.h>
using namespace std;
double Quadratic(double A,double B,double C,bool choose)
{
 if(A)
 {
  if((B*B-4*A*C)<0)
   throw "Error";
  else
   if(choose)
    return ((-1)*B+sqrt(B*B-4*A*C))/(2*A);
   else
    return ((-1)*B-sqrt(B*B-4*A*C))/(2*A);
 }
 else
  throw C/((-1)*B);
}
int main()
{
 try
 {
    double A,B,C;
 cout<<"Enter three number:";
 cin>>A>>B>>C;
 cout<<"The answer is:"<<Quadratic(A,B,C,1)<<"And"<<Quadratic(A,B,C,0)<<'\n';
 }
 catch(char *ptr)
 {
  cout<<ptr<<'\n';
 }
 catch(double answer)
 {
  cout<<"The answer is:"<<answer<<'\n';
 }
 return 0;
}
2011-06-17 15:15
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:10 
1、
C++语言中使用了throw和try-catch语句支持异常处理。
2、
异常处理机制步骤:
❶ 检查异常(使用try语句块)
❷ 抛出异常(使用throw语句块)
❸ 捕捉异常(使用catch语句块)
3、
throw语句一般由throw运算符和一个数据组成的,形式为:
 throw 表达式;
 
try-catch的结构为:
 try
{ 被检查的语句 }
catch (异常信息类型[变量名])
 {  进行异常处理的语句  
4、
说明:
  try块和catch块作为一个正题出现
  一个try-catch结构中只能有一个try块,但却可以有多个catch块,以便与不同的异常信息匹配。
  catch 后面的括号中,一般只写异常信息的类型名。但catch(……)表示可以捕捉任何类型的异常信息。
  在某些情况下,在throw语句中可以不包括表达式,如:
      catch(……)   
      
           //其他语句
           throw;  //将编译捕获的异常信息再次原样抛出,由上一层的catch块处理
      
  如果throw排除的异常信息找不到与之匹配的catch块,那么系统会调用一个系统函数terminate,是程序终止运行。
5、
C++语言中异常处理的完整过程是程序顺序执行try语句中的语句。如果在执行try块内的各条语句中都没有发生异常,则跳过catch块,转到执行catch块后面的语句。如果在执行try块内的某一条语句中发生异常,则由被调函数的throw抛出异常信息。由throw抛出的异常信息给catch块,系统寻找与之匹配的catch子句,进行异常处理后,程序继续执行catch子句后面的语句,而跳过try中的剩余语句。
示例代码:
#include<iostream>
using namespace std;
 
int Divide(int x,int y)
{
 if(y==0)
  throw y;   //如果分母为0,抛出异常
 return x/y;
}
 
int main()
{
 int a=10,b=5,c=0;
 try           //检查是否出现异常
 {
  cout<<"a/b="<<Divide(a,b)<<endl;
  cout<<"b/a="<<Divide(b,a)<<endl;
  cout<<"a/c="<<Divide(a,c)<<endl;
  cout<<"c/b="<<Divide(c,b)<<endl;
 }
 
catch (int)  //捕获异常并作出处理,即输出一条提示信息
 {
  cout<<"except of divide zero"<<endl;
 }
 
cout<<"calculate finished "<<endl;  //catch块的后续语句
 
return 0;
}

Einmal ist keinmal
2011-06-17 22:15
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这些例子举的还不错~~

楼主用心体会体会呗。
2011-06-17 22:20
快速回复:关于 异常处理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012030 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved