C++ 中的自定義異常

Muhammad Husnain 2024年2月15日
  1. C++ 中的異常處理
  2. C++ 中的自定義異常
C++ 中的自定義異常

這個簡短的程式設計教程是關於在 C++ 中實現自定義異常類和在 C++ 中實現使用者定義的異常類的基本規則。

C++ 中的異常處理

在 C++ 中,異常處理是一種處理執行時問題的方法。我們處理異常,因此即使發生執行時問題,也可以維持應用程式的正常流程。

在 C++ 中,異常是在執行過程中丟擲的一個物件,會干擾程式的正常執行。

std::exception 類是所有異常的根源。如果我們不處理任何異常,應用程式將列印一條錯誤訊息並終止。

異常允許控制從一個程式區域傳遞到另一個程式區域。三個關鍵字 trycatchthrow 處理 C++ 中的異常。

  1. throw - 如果你的程式碼中的某個段可能導致問題,那麼我們使用 throw 關鍵字丟擲異常並指定可能發生的異常型別。
  2. try - 它包含可能導致錯誤並需要丟擲異常的程式碼段。
  3. 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()

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

相關文章 - C++ Exception