ホームページ >バックエンド開発 >C++ >C++ 関数例外とクラス例外: 複数の例外処理戦略

C++ 関数例外とクラス例外: 複数の例外処理戦略

WBOY
WBOYオリジナル
2024-05-03 17:18:01314ブラウズ

C 例外処理は、関数例外とクラス例外の 2 種類に分かれます。複数の例外処理戦略には、1 つずつ処理することや基本クラスをキャプチャすることが含まれます。実際の戦闘では、例外処理戦略を使用して、さまざまなソースからの例外を処理し、例外の種類に応じてさまざまなエラー メッセージを出力できます。

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

C 関数例外とクラス例外: 複数の例外処理戦略

概要

例外処理は、C でランタイム エラーを処理する方法です。強力なメカニズム。これにより、プログラムは例外が発生したときに正常に応答し、回復することができます。 C には、関数例外とクラス例外の 2 種類の例外があります。この記事では、これら 2 つの例外タイプについて説明し、複数の例外処理戦略を使用してそれらを同時に処理する方法を示します。

関数例外

関数例外は、関数内で直接スローされる例外です。 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. 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;
}

以上がC++ 関数例外とクラス例外: 複数の例外処理戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。