ホームページ  >  記事  >  バックエンド開発  >  C++関数の例外処理で例外クラスを定義するにはどうすればよいですか?

C++関数の例外処理で例外クラスを定義するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-04-15 21:45:011088ブラウズ

C で定義された Exception クラス: 新しいクラスは std::Exception から派生し、例外メッセージを提供する仮想関数をオーバーライドする必要があります。例に示すように、MyException クラスは例外メッセージを返す内容をオーバーライドします。実際の場合、divide 関数は std::runtime_error 例外をスローし、main 関数は例外メッセージをキャプチャして出力します。

C++ 函数异常处理中的异常类如何定义?

#C 関数例外処理における例外クラス定義

C では、関数例外を処理するために例外クラスが使用されます。例外クラスを定義するには、

std::Exception クラスから新しいクラスを派生し、例外メッセージを提供するために what 仮想関数をオーバーライドします。

次に、例外クラスを定義する例を示します。

#include <exception>

class MyException : public std::exception {
public:
  MyException(const char* message) : std::exception(message) {}
  MyException(const std::string& message) : std::exception(message.c_str()) {}
  const char* what() const noexcept override { return message_.c_str(); }

private:
  std::string message_;
};

この例では、

MyException クラスは std::Exception から派生します。クラスを変更し、例外メッセージを返すように what 関数を書き換えました。メッセージはコンストラクターで設定できます。

実践的なケース

次に、例外クラスを使用する関数の例を示します。

#include <exception>
#include <iostream>

void divide(int numerator, int denominator) {
  if (denominator == 0) {
    throw std::runtime_error("Cannot divide by zero");
  }
  std::cout << "Result: " << numerator / denominator << std::endl;
}

int main() {
  try {
    divide(10, 0);  // 抛出异常
  } catch (const std::exception& e) {  // 捕获异常
    std::cerr << "Error: " << e.what() << std::endl;
  }
  return 0;
}

上の例では、

divide 関数が動作します。除数がゼロの場合、std::runtime_error 例外がスローされます。 main 関数は、try-catch ブロックを使用して例外をキャッチし、例外メッセージを出力します。

以上がC++関数の例外処理で例外クラスを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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