zoukankan      html  css  js  c++  java
  • 异常的基本使用

    异常

    异常处理就是处理程序中的错误。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除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++异常处理使得异常的引发和异常的处理不必在一个函数中,这样底层的函数可以着重解决具体问题,而不必过多的考虑异常的处理。上层调用者可以在适当的位置设计对不同类型异常的处理。

  • 相关阅读:
    大数相加和快速相乘
    (转)直线分割平面 与 平面分割区域 问题
    8.3水了一天
    8.2数论(1)
    7.31 基本算法1.2
    7.31 基本算法1.1
    《GSoC 2019小结》&《买车小记》By Ray Guo
    【笔试题】中国电信天翼智慧家庭2020春季校园招聘
    TinyMCE主题的文章目录没法点击页内跳转
    【毕设】答辩如何准备?本科毕业论文如何撰写文献综述?
  • 原文地址:https://www.cnblogs.com/yifengs/p/15183705.html
Copyright © 2011-2022 走看看