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 (...) { // 处理任何其他异常 }
考慮以下程式碼,它呼叫divide
和checkNumber
函數並根據不同的異常情況列印訊息:
#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中文網其他相關文章!