首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 異常處理與類異常示例 — try/catch/throw 實戰

     編輯:關於C++

1. 基礎異常處理流程

#include 
#include 
using namespace std;

class Wrong {}; // 異常類型標識

int intDiv(int a, int b) {
    try {
        if (b == 0) throw 10; // 拋出 int
        // if (b == 0) throw Wrong(); // 拋出類對象
        return a / b;
    } catch (int e) {
        cout << "除法異常已處理: " << e << endl;
        return -1;
    }
}

int main() {
    int x, y;
    cin >> x >> y;
    try {
        if (y == 0) throw "被除數為0";
        if (x == 0) throw "除數為0";
    } catch (const char* msg) {
        cout << msg << ",請重新輸入" << endl;
        cin >> x >> y;
    }
    cout << intDiv(x, y) << endl;
    return 0;
}

2. 類構造函數中拋出異常

若構造函數拋出異常,對象未完全構造,析構函數不會被調用。需確保已分配資源在拋出前釋放,或使用智能指針/RAII。

class Array {
    int *p, n;
public:
    Array(int num) {
        if (num <= 0) throw Wrong(); // 拋出前未分配記憶體,安全
        n = num;
        p = new int[num];
        for (int i=0; i= n) throw WrongA();
        return p[idx];
    }
};

3. 異常類型層次與捕獲順序

捕獲時按聲明順序匹配,子類異常應放在基類之前。示例中定義巢狀異常類 zero, wrong, big, small,捕獲時用 catch (Box::zero) 等精確匹配。

4. 面試 100 題(摘要)

文檔另存為獨立文件,此處不再列出。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved