什么是异常
异常是一种处理错误的方式。
例如:一个函数发现自己无法处理的错误时就可以抛出异常,让别的函数直接或间接的调用处理这个错误。
- throw:出现问题时,程序会抛出一个异常。
- try:尝试破获异常。
- catch:异常的处理方法。
通常将有可能出现异常的代码放在try{}程序块中,将异常处理的语句放在catch{}程序块中,但是捕获与处理的条件是,抛出的异常的类型与catch块参数的类型匹配。
注意
并不是使用了try来包含可能出现异常的代码后,程序就不会崩溃,通常需要(1)满足某个条件时显示抛出异常(2)使用catch来匹配抛出异常类型。
try
{
//保护的代码
}
catch(类型名[参数名])
{
//异常处理的代码I
}
catch(类型名[参数名])
{
//异常处理的代码II
}
int Func2()
{
throw "Error"; //尝试抛出异常
}
void Func1()
{
cout << Func2() << endl;
}
int main()
{
try
{
Func1(); //尝试捕获异常
}
catch (const char* errmsg) //异常处理函数
{
cout << "Exception cannot be destroyed" << endl;
}
system("pause");
return 0;
}
异常处理的顺序
- 抛出异常
- 捕获异常
- 处理异常
抛出异常是由程序员决定什么是异常,是否抛出异常,以及抛出哪种异常。
万能捕获异常catch(…),类似于一种“保底”做法。防止出现异常没有匹配的catch块,导致程序的退出,一般是将catch(…)放在catch块的末尾。
try
{
}
catch(...)
{
}
异常的规范
- 异常是为了让函数使用者知道该函数可以抛出的异常有哪些。
- 函数后面直接加throw(类型),列出这个函数可能抛出的所有异常。
- 函数后面直接加throw(),表示函数不会抛异常。
有可能单个catch不能完全处理一个异常,则希望再交给外层调用函数进行处理,则需要将异常重新抛出。
类中异常的抛出
class Func1
{
protected:
int _data;
string _error;
};
class Func2:public Func1
{
throw "Error";
};
class Func3:public Func1
{
throw "Error2";
};
int main()
{
try
{
//抛出异常的一般都是派生类
}
catch(const Func1& f)
{
//异常的处理
}
return 0;
}
来源:CSDN
作者:南阳0146
链接:https://blog.csdn.net/qq_42708024/article/details/104641553