首頁 >後端開發 >C++ >C++ 函式異常與類別異常:多重異常處理策略

C++ 函式異常與類別異常:多重異常處理策略

WBOY
WBOY原創
2024-05-03 17:18:01314瀏覽

C 異常處理分為函數異常和類別異常兩種。多重異常處理策略包括逐一處理和捕獲基類兩種。在實戰中,可以使用異常處理策略處理不同來源的異常,根據異常類型列印不同的錯誤訊息。

C++ 函数异常与类异常:多重异常处理策略

C 函數異常與類別異常:多重異常處理策略

#概述

異常處理是C 中一種處理運行時錯誤的強大機制。它允許程式在發生異常時優雅地響應和恢復。 C 中有兩種類型的異常:函數異常和類別異常。本文將探討這兩種異常類型,並展示如何使用多重異常處理策略來同時處理它們。

函數異常

函數異常是直接在函數中拋出的例外。它們使用 throw 關鍵字,後面跟著一個異常類型或物件。例如:

void divide(int a, int b) {
  if (b == 0)
    throw std::runtime_error("Division by zero");
}

類別異常

類別異常是由使用者自訂類別拋出的例外。它們使用 throw 關鍵字,後面跟著一個異常類別實例。例如:

class NegativeNumberException : std::exception {
public:
  const char *what() const override {
    return "Cannot accept negative numbers";
  }
};

void checkNumber(int n) {
  if (n < 0)
    throw NegativeNumberException();
}

多重例外處理策略

有時,函數或類別可能同時拋出多種例外。在這種情況下,可以使用多重異常處理策略來處理所有異常。以下策略是常用的:

1. 逐一處理:

try {
  // 调用可能抛出异常的代码
} catch (std::runtime_error &e) {
  // 处理 std::runtime_error 异常
} catch (NegativeNumberException &e) {
  // 处理 NegativeNumberException 异常
} catch (...) {
  // 处理任何其他异常
}

2. 捕捉基底類別:

try {
  // 调用可能抛出异常的代码
} catch (std::exception &e) {
  // 处理所有 std::exception 派生的异常
} catch (...) {
  // 处理任何其他异常
}

實戰案例

考慮以下程式碼,它呼叫dividecheckNumber 函數並根據不同的異常情況列印訊息:

#include <iostream>
using namespace std;

void divide(int a, int b);
void checkNumber(int n);

int main() {
  try {
    divide(5, 0);
  } catch (std::runtime_error &e) {
    cout << "Division by zero occurred" << endl;
  } catch (NegativeNumberException &e) {
    cout << "Negative number detected" << endl;
  } catch (...) {
    cout << "Unknown exception occurred" << endl;
  }

  try {
    checkNumber(10);
  } catch (...) {
    cout << "Error in number check" << endl;
  }

  return 0;
}

輸出:

Division by zero occurred
Error in number check

以上是C++ 函式異常與類別異常:多重異常處理策略的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn