HOWTO · C++
C++ 中的自定義異常
關於在 C++ 中實現自定義異常類的程式設計教程。
這個簡短的程式設計教程是關於在 C++ 中實現自定義異常類和在 C++ 中實現使用者定義的異常類的基本規則。
C++ 中的異常處理
在 C++ 中,異常處理是一種處理執行時問題的方法。我們處理異常,因此即使發生執行時問題,也可以維持應用程式的正常流程。
在 C++ 中,異常是在執行過程中丟擲的一個物件,會干擾程式的正常執行。
std::exception 類是所有異常的根源。如果我們不處理任何異常,應用程式將列印一條錯誤訊息並終止。
異常允許控制從一個程式區域傳遞到另一個程式區域。三個關鍵字 try、catch 和 throw 處理 C++ 中的異常。
throw- 如果你的程式碼中的某個段可能導致問題,那麼我們使用throw關鍵字丟擲異常並指定可能發生的異常型別。try- 它包含可能導致錯誤並需要丟擲異常的程式碼段。catch- 丟擲異常時呼叫的塊。在這段程式碼中,我們可以通知使用者錯誤並在需要時以程式設計方式結束程式。
一個常見的異常示例是執行時發生的除以零錯誤。它是程式中最常發生的異常。
讓我們看一下下面的程式碼片段,它很容易出現這種除以零執行時異常。
#include <iostream>
using namespace std;
float divideFunc(int a, int b) {
if (b == 0) {
throw "User made a division with zero!";
}
return (a / b);
}
int main() {
int num1 = 20;
int num2 = 0;
float result = 0;
try {
result = divideFunc(num1, num2);
cout << result << endl;
} catch (const char* msg) {
cout << msg << endl;
}
}
輸出:
異常類層次結構
exception 是一個有許多類作為子類的類,所有這些類都是異常的型別。C++ 有一組預定義的常見異常型別,可以在程式中輕鬆使用。
C++ 中的自定義異常
C++ 中未指定的自定義異常可能有助於在特定情況下生成。在 C++ 中,任何滿足特定條件的型別都可以被捕獲或丟擲。
這些包括具有有效複製建構函式和解構函式的型別。
自定義異常為異常處理機制提供了有關問題的有用資訊。它們可以通過建立具有必要屬性的新類並丟擲該類的例項或通過從 std::exception 繼承並覆蓋 what() 函式來建立。
假設我們需要在程式中獲取正數輸入。如果輸入負數,我們可以丟擲異常。
我們可以如下建立一個自定義異常類。
class MyExceptionClass : public exception {
public:
const char* what() const throw() { return "Negative number not allowed\n"; }
};
這可以在驅動程式中捕獲,如下所示。
int main() {
try {
int a;
cout << "Enter a number : \n";
cin >> a;
if (a < 0) {
MyExceptionClass c;
throw c;
} else {
cout << "you entered: " << a << endl;
}
} catch (exception& e) {
cout << e.what();
}
}
輸出:
我們可以在上面的程式碼中看到,我們已經使用 Exception 類繼承了我們的自定義異常類,並覆蓋了一個將在丟擲異常時呼叫的方法 what()。