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;
    }

  • 相关阅读:
    23种设计模式
    <转>企业应用架构 --- 分层
    <转>C/S架构分析
    Decorator 模式转载
    2019-10-24 体检结果备查,降甘油三脂药物
    Entity Framework Core 文档 & Core Web API 文档
    MSSQLLocalDB 微软本地数据库,pk SQLlite
    InstallWatch Pro
    学习 skoruba/ IdentityServer4.Admin 完整版
    无代码与低代码开发平台,云+本地,阿里/腾讯
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/7204075.html
Copyright © 2011-2022 走看看