【數據結構】 10_C++異常簡介

  • C++ 內置了異常處理的語法元素 try...catch...ios

    • try 語句處理正常代碼邏輯
    • catch 語句處理異常代碼邏輯
    • try 語句中的異常由對應的 catch 語句處理
try
{
    double r = divide(1, 0);
}
catch (...)
{
    cout << "Divided by zero ..." << endl;
}

  • C++ 經過 throw 語句拋出異常
double divide(double a, double b)
{
    const double delta = 0.00000000001;
    double ret = 0;

    if (!((-delta < b) && (b < delta)))
    {
        ret = a / b;
    }
    else
    {
        throw 0;    // 產生除 0 異常
    }

    return ret;
}

  • C++ 異常處理分析編程

    • throw 拋出的異常必須被 catch 處理ide

      • 當前函數可以處理異常,程序繼續往下執行
      • 當前函數沒法處理,則函數中止執行,並返回

未被處理的異常會沿着函數調用棧向上傳播,直到被處理爲止,不然程序將中止執行。函數

image.png


編程實驗:C++異常處理初探spa

#include <iostream>

using namespace std;

double divide(double a, double b)
{
    const double delta = 0.00000000001;
    double ret = 0;

    if (!((-delta < b) && (b < delta)))
    {
        ret = a / b;
    }
    else
    {
        throw 0;    // 產生除 0 異常
    }

    return ret;
}

int main()
{
    cout << "main() begin" << endl;

    try
    {
       double r = divide(1, 0);

       cout << r << endl;
    }
    catch(...)
    {
        cout << "Divided by zero ..." << endl;
    }

    cout << "main() end" << endl;

    return 0;
}

輸出:code

main() begin
Divided by zero ...
main() end

  • 同一個 try 語句能夠跟上多個 catch 語句blog

    • catch 語句能夠定義具體處理的異常類型
    • 不一樣異常的類型由不一樣的 catch 語句負責處理
    • try 語句中能夠拋出任何類型的異常
    • 任何異常只能被捕獲(catch)一次
  • 異常處理的匹配規則

image.png

編程實驗:異常類型匹配it

#include <iostream>

using namespace std;

void Demo1()
{
    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 "D.T.Software";
}

int main()
{
    cout << "main() begin" << endl;

    Demo1();

    try
    {
        Demo2();
    }
    catch (char *c)
    {
        cout << "catch (char *c)" << endl;
    }
    catch (const char *cc)
    {
        cout << "catch (const char *cc)" << endl;
    }
    catch (...)
    {
        cout << "catch (...)" << endl;
    }

    cout << "main() end" << endl;

    return 0;
}

小結io

  • C++ 中直接支持異常處理的概念
  • try...catch... 是C++中異常處理的專用語句
  • try 語句處理正常代碼邏輯,catch 語句處理異常狀況
  • 同一個 try 語句能夠跟上多個 catch 語句
  • 異常處理必須嚴格匹配,不進行任何的類型轉換

以上內容整理於狄泰軟件學院系列課程,請你們保護原創!class

相關文章
相關標籤/搜索