• 第10课


    -c++内置了异常处理的语法元素try...catch...

      -try语句处理正常代码逻辑

      -catch语句处理异常情况

      -try语句中的异常由对应的catch语句处理

        try
        {
            double c = divide(1, 0);
    
            cout << "c = " << c << endl;
        }
        catch(...)
        {
            cout << "Divided by zero..."  << endl;
        }

    -c++通过throw语句抛出异常信息

    double divide(double a, double b)
    {
        const double delta = 0.000000000000001;
        double ret = 0;
    
        if( !((-delta < b) && (b < delta)) ) {
            ret = a / b;
        }
        else {
            throw 0;   // 产生除 0 异常
        }
    
        return ret;
    }

    ——c++异常处理分析

      - throw抛出的异常必须被catch处理

        -当前函数能够处理异常,程序继续往下执行

        -当前函数无法处理异常,则函数停止执行,并返回

     fuc3抛出异常,如果fuc3中没有异常处理,则异常传递到fuc2,如果fuc2有异常处理,程序返回继续执行,如果没有异常处理,继续返回fuc3,依次类推,如果最后返回到main函数都还没有处理异常,程序停止运行。

    #include <iostream>
    
    using namespace std;
    
    double divide(double a, double b)
    {
        const double delta = 0.000000000000001;
        double ret = 0;
    
        if( !((-delta < b) && (b < delta)) ) {
            ret = a / b;
        }
        else {
            throw 0;   // 产生除 0 异常
        }
    
        return ret;
    }
    
    void Demo1()
    {
        //catch捕获,没有类型转换,必须完全匹配
        try
        {
            throw 'c';
        }
        catch(int i)
        {
            cout << "catch(int i)" << endl;
        }
        catch(double d)
        {
            cout << "catch(double d)" << endl;
        }
        catch(char c)
        {
            cout << "catch(char c)" << endl;
        }
    }
    
    void Demo2()
    {
        throw 0.0001; // "D.T.Software";   // const char*
    }
    
    int main()
    {
        cout << "main() begin" << endl;
        //没有异常,不处理
        try
        {
            double c = divide(1, 1);
    
            cout << "c = " << c << endl;
        }
        catch(...)
        {
            cout << "Divided by zero..."  << endl;
        }
    
        Demo1();
    
        try
        {
            Demo2();
        }
        catch(char* c)
        {
            cout << "catch(char* c)" << endl;
        }
        catch(const char* cc)
        {
            cout << "catch(char* cc)" << endl;
        }
        catch(...)
        {
            cout << "catch(...)" << endl;
        }
    
        cout << "main() end" << endl;
    
        return 0;
    }

  • 相关阅读:
    学习再学习···
    Verilog中文件输入与输出任务实例解析(转载)
    入门实验——流水灯
    论文的参考文献
    Testbench新接触(学习笔记)
    Verilog再接触 问题集
    verilog 语句不可综合和可综合汇总
    关于modelsim 6.4a遇到的问题
    DevExpress.XtraEditors.GridLookUpEdit 隐藏列
    Sql 计算一个词出现的次数
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7204075.html
Copyright © 2020-2023  润新知