zoukankan      html  css  js  c++  java
  • 第10课 C++异常简介

    1. try-catch语句

    (1)try语句处理正常代码逻辑

    (2)catch语句处理异常情况

    (3)try语句中的异常由对应的catch语句处理

    (4)C++通过throw语句抛出异常信息

    2. C++异常处理分析

    (1)throw抛出的异常必须被catch处理

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

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

    (2)未被处理的异常会顺着函数调用栈向上传播,直到被处理为止,否则程序将停止执行。

    (3)同一个try语句可以跟上多个catch语句

      ①catch语句可以定义具体处理的异常类型

      ②不同类型的异常由不同的catch语句负责处理

      ③try语句中可以抛出任何类型的异常

      ④catch(…)用于处理所有类型的异常

      ⑤任何异常都只能被捕获(catch)一次

    (4)异常处理的匹配规则

     

    【编程实验】C++异常处理

    //main.cpp

    #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()
    {
        try{
            throw 'c';  //抛出字符型的异常
        }catch(int i){
            cout << "catch(int i)" << endl;
        }catch(double d){
            cout << "catch(double d)" << endl;
        }catch(char c){ //只能被这里的catch捕获
            cout << "catch(char c)" << endl;
        }
    }
    
    void Demo2()
    {
        throw "Demo2";   //const char*
    }
    int main()
    {
        cout << "main() begin" << endl;
    
        try{
            double c = divide(1, 0);//产生异常
            cout <<"c = " << c << endl; //无法被执行到!
        }catch(...){
            cout << "Divide by zero..." << endl;
        }
    
        Demo1();
    
        try{
            Demo2();
        }catch(char* c){
            cout << "catch(char* c)" << endl;
        }catch(const char* c){
            cout << "catch(const char* c)" << endl;
        }catch(...){
            cout << "catch(...)" << endl;
        }
    
        cout << "main() end" << endl;
        return 0;
    }
    /*输出结果
    main() begin
    Divide by zero...
    catch(char c)
    catch(const char* c)
    main() end
    */

    3. 小结

    (1)C++中直接支持异常处理的概念

    (2)try…catch…是C++中异常处理的专用语句

    (3)try语句处理正常代码逻辑,catch语句处理异常情况

    (4)同一个try语句可以跟上多个catch语句

    (5)异常处理必须严格匹配,不进行任何的类型转换

  • 相关阅读:
    Atcoder Grand Contest 003 题解
    Atcoder Grand Contest 002 题解
    Atcoder Grand Contest 001 题解
    网络流24题
    AGC005D ~K Perm Counting
    loj6089 小Y的背包计数问题
    CF932E Team Work
    组合数学相关
    SPOJ REPEATS
    [SDOI2008]Sandy的卡片
  • 原文地址:https://www.cnblogs.com/5iedu/p/6645920.html
Copyright © 2011-2022 走看看