zoukankan      html  css  js  c++  java
  • 第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;
    }

  • 相关阅读:
    Django 标签过滤器
    Python短路原则
    python学习之路 八 :面向对象编程基础
    python学习之路 七 :生成器、迭代器
    python学习之路 六 :装饰器
    python学习之路 五:函数式编程
    python学习之路 四 :文件处理
    python学习之路 三:字符编码
    机器学习流程管理
    pyspark 自定义聚合函数 UDAF
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7204075.html
Copyright © 2011-2022 走看看