异常
在c语言中,对错误的处理总是两种方法:
1,使用整型的返回值表示错误(有时候用1表示正确,0表示错误;有的时候0表示正确,1表示错误)
2,使用errno宏(可以简单理解为一个全局整形变量)去记录错误。(如果错误,就将被改变的全局整形变量返回)
c++中仍然可以用上面的两种方法,但是有缺点。
(1)返回值不统一,到底是1表示正确,还是0表示正确。
(2)返回值只有一个,通过函数的返回值表示错误代码,那么函数就不能返回其他的值。(输出的值到底是表示异常的值-1,还是最后在那个结果就是-1呢)
抛出异常基本操作
c++处理异常的优点:
异常处理可以带调用跳级。

在C程序中出现了异常,返回值为-1。如果C直接将-1传给B,不进行处理(也不给B报错),那么B收到-1返回值以后就会进行自己的处理,然后返回给A,然后A再进行自己的处理,那么最终程序返回的值肯定是错误的。
所以在c++中,要求必须要处理异常。如果C处理不了允许抛给B处理,B处理不了也允许抛给A处理,如果A也处理不了,那么就直接终止代码报错。
int myDivision(int a, int b)
{
if (b == 0)
{
throw -1;//抛出-1
}
else
return 1;
}
int main()
{
int a = 10;
int b = 0;
try
{
myDivision(a, b);
}
catch (int)
{
cout << "int类型异常捕获" << endl;
}
return 0;
}
如果抛出来的是char类型的数据(异常),那么就需要有个char类型的接收处理代码(catch+类型)。
除了int,char,double以外的抛出类型,可以用...
来接收。
catch (...)
{
cout << "其他类型异常捕获" << endl;
}
如果捕获到了异常,但是不想处理,那么可以继续向上抛出异常。
int myDivision(int a, int b)
{
if (b == 0)
{
throw -1;
}
}
void test()
{
int a = 10;
int b = 0;
try
{
myDivision(a, b);
}
catch (int)
{
throw;
}
}
int main()
{
try
{
test();
}
catch (int)
{
cout << "int类型异常捕获" << endl;
}
return 0;
}
自定义的异常类
注意:类名加()就是匿名对象
class MyException
{
public:
void printError()
{
cout << "我自己的异常" << endl;
}
};
int myDivision(int a, int b)
{
if (b == 0