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;
}