BZ易风

导航

 

异常

异常处理就是处理程序中的错误。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在,空指针,内存不足等等)

  • try 试图执行 try{}中的内容
  • 在可能出现异常的地方 抛出异常  throw
  • try下面 catch捕获异常
  • catch( 捕获类型 )  …代表 所有其他类型
  • 如果不想处理异常,继续向上抛出  throw
  • 如果没有任何处理异常的地方,那么成员调用terminate函数,中断程序
  • 自定义异常类 ,可以抛出自定义的对象  ,捕获自定义的异常

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

//如果判断返回值,那么返回值是错误码还是结果?
//如果不判断返回值,那么b==0时候,程序结果已经不正确
//A写的代码
int A_MyDivide(int a, int b) {
    if (b == 0) {
        throw - 1;        //抛出int异常
        //throw 3.14;        //抛出double异常 异常必须处理,如果不处理 就挂掉
    }
    return a / b;
}

void test01()
{
    int a = 10;
    int b = 0;
    try
    {
        A_MyDivide(a, b);
    }
    catch (int) //捕获int异常    对应抛出的异常 如果不符合 则不走这里
    {
        //如果不想处理这个异常 可以继续向上抛出
        throw;
    }
    catch (...)  //捕获所有类型异常
    {
        cout << "其它类型异常捕获" << endl;
    }
}


int main()
{
    try
    {
        test01();
    }
    catch (int)  //如果抛出的异常都没有得到处理, 那么成员terminate函数会使程序中断
    {
        cout << "main 函数int异常捕获" << endl;
    }
    catch (...)
    {
        cout << "main 函数其它异常捕获" << endl;
    }
    system("Pause");
    return 0;
}

结果:

总结:

  • 若有异常则通过throw操作创建一个异常对象并抛出。
  • 将可能抛出异常的程序段放到try块之中。
  • 如果在try段执行期间没有引起异常,那么跟在try后面的catch字句就不会执行。
  • catch子句会根据出现的先后顺序被检查,匹配的catch语句捕获并处理异常(或继续抛出异常)
  • 如果匹配的处理未找到,则运行函数terminate将自动被调用,其缺省功能调用abort终止程序。
  • 处理不了的异常,可以在catch的最后一个分支,使用throw,向上抛。

c++异常处理使得异常的引发和异常的处理不必在一个函数中,这样底层的函数可以着重解决具体问题,而不必过多的考虑异常的处理。上层调用者可以在适当的位置设计对不同类型异常的处理。

posted on 2021-08-25 10:05  BZ易风  阅读(46)  评论(0编辑  收藏  举报