C 例外処理は、関数例外とクラス例外の 2 種類に分かれます。複数の例外処理戦略には、1 つずつ処理することや基本クラスをキャプチャすることが含まれます。実際の戦闘では、例外処理戦略を使用して、さまざまなソースからの例外を処理し、例外の種類に応じてさまざまなエラー メッセージを出力できます。
例外処理は、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 サイトの他の関連記事を参照してください。