? ? ? 异常处理主要是针对能通过编译但是运行是在某个特定条件下会出现异常,程序崩溃,结果出错。来进行的东西
C++处理异常的机制是由3个部分组成的,即检查(try)、抛出(throw)和捕捉(catch)。把需要检查的语句放在try块中,throw用来当出现异常时发出一个异常信息,而catch则用来捕捉异常信息,如果捕捉到了异常信息,就处理它。
try ? ? ? {被检查的语句}
catch(异常信息类型 [变量名]) ? ? ?
{进行异常处理的语句}?
粘一个简单的异常处理的题:
如果三角形满足三角形内角和大于第三边才会有输出,否则进行异常处理。
#include<iostream>
using namespace std;
int main()
{
double triangler(double a, double b, double c);
{
double a, b, c;
cin >> a >> b >> c;
try //在try块中包含要检查的函数
{
while (a > 0 && b > 0 && &c > 0)
{
cout << triangler(a, b, c) << endl;
cin >> a >> b >> c;
}
}
//catch (double) //只能抛出对应类型的异常
//{
// {cout << "a=" << a << ",b=" << b << ",c=" << c << ",that is not a triangler!" << endl; }
// cout << "end" << endl;
//}
catch (...) //”...“代表可以抛出任何类型的异常
{
{cout << "a=" << a << ",b=" << b << ",c=" << c << ",that is not a triangler! it is all typical!" << endl; }
cout << "end" << endl;
}
}
}
double triangler(double a, double b, double c)
{
double s = (a + b + c) / 2;
if (a + b <= c || a + c <= b || b + c <= a) throw a; //抛出异常对象
return sqrt(s * (s - a) * (s - b) * (s - c));
}
1.在主函数中添加需要检查的语句或者程序段到try语句下;如果运行到try区域出现异常 则会抛出一个throw,然后返回上一级程序。在进行异常处理后,程序并不会自动终止,继续执行catch子句后面的语句。若是没有发现异常,直接跳到catch以后的程序
2.throw抛出的数据类型又人们自己来定义,catch(后的括号有什么数据类型则会检查什么数据类型的错误),如果比较懒的花括号里写三个点(...)代表所有类型
3.try catch结构可以与throw不在一起,甚至不在一个函数里。如果throw出一个异常,throw 会首先在本函数里找try catch函数如果找不到则会采取就近原则。
4.可以单独出现try,但不能单独出现catch
|