一、异常处理
1.概念:对有可能发生异常的地方做出预见性的安排,异常处理过程如下图所示:
f1()出现异常,就会抛给调用者f2(),如果f2()处理不了就继续往上抛给它的调用者,依次类推。。。
2.使用例子:
使用try(尝试)...catch(捕获) throw(主逻辑抛出异常)
因为 1是整数,所以catch里面的数据类型是int,如果想获得1的值,就用参数int &,在catch里面进行异常处理,在try里面运行正常的逻辑。
3.特点:
try与catch可以是一对多的关系,但是不能没有catch
4.常见异常
(1)数组下标越界
(2)除数为0
(3)内存不足
5.异常处理与多态的关系
定义一个异常接口类Exception作为基类,那么每一种具体的异常都可以通过传入父类类型来捕获并处理了。
不管是哪一种异常,都可以给catch传入父类Exception的类型来捕获,然后根据多态,运行的就是每个子类本身的包含异常处理过程的虚函数。
完整的代码例子如下:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
/**
* 定义函数division
* 参数整型dividend、整型divisor
*/
int division(int dividend, int divisor)
{
if(0 == divisor)
{
// 抛出异常,字符串“除数不能为0”
throw string("除数不能为0");
}
else
{
return dividend / divisor;
}
}
int main(void)
{
int d1 = 0;
int d2 = 0;
int r = 0;
cin >> d1;
cin >> d2;
// 使用try...catch...捕获异常
try
{
division(d1,d2);
}
catch(string str)
{
cout<<str<<endl;
}
return 0;
}
输出结果:
除数不能为0