异常处理简单来说就是处理程序中的错误。
先讲下简单的用法:
我们可以通过以下代码看下异常处理的基本语法
#include<iostream>
using namespace std;
int text(int x, int y) throw(int ,char)//异常接口声明,只允许抛出int,char类型的异常
{
if(y == 0)
{
throw y;//抛出异常
}
return x/y;
}
int main()
{
try//捕获异常
{
text(10,0);
}
catch(int y)//异常时根据类型匹配
{
cout<<"除数为"<<y<<endl;
}
return 0;
}
运行结果为
这里有三个关键的函数:
简单来说就是:1.throw是用来抛出异常2.try是去尝试捕获异常3.catch是去处理异常,一个函数里可以有多个catch去处理不同类型的异常,catch(...)的意思是处理所有的异常。
然后我们再看一段代码
int text(int x, int y)
{
if(y == 0)
{
throw y;//抛出异常
}
return x/y;
}
int fun(int x,int y)
{
return text(x,y);
}
int main()
{
try//捕获异常
{
fun(10,0);
}
catch(int y)//异常时根据类型匹配
{
cout<<"除数为"<<y<<endl;
}
return 0;
}
我们用fun函数间接调用text,捕获异常是捕获的fun函数,然后看下结果
所以可以知道异常可以向上抛,直到处理他,如果抛到顶层都没有处理,那么该程序就会崩掉,可以看下图形象的理解
接着我们看一下怎么才能是异常处理更加的灵活
#include<iostream>
#include<string.h>
using namespace std;
class MyException//自己定义一个错误处理类
{
public:
MyException(char* str)
{
error=new char[strlen(str)+1];
strcpy(error,str);
}
void what()
{
cout<<error<<endl;
}
public:
char* error;
};
int fun()
{
throw MyException("这是一个错误");//这样可以自定义异常信息
}
int main()
{
try//捕获异常
{
fun();
}
catch(MyException y)//处理MyException这个类抛出的异常
{
y.what();//因为抛出的是一个对象,我们可以调用他的成员方法
}
return 0;
}
让异常抛出一个类,我们可以通过定义自己的类,灵活的处理我们需要效果。
c++也提供了我们标准的异常处理库
一般我们自己写的异常类最好得继承标准库里的类,如exception,头文件为<stdexcept>
当然不同类型的错误可以用不同的标准库