C では、例外処理メカニズムは非常に重要なプログラミング スキルです。これにより、プログラムはエラーや異常な状況に対処して処理し、プログラムのクラッシュやスローを回避できます。不明な例外が発生しました。 。ただし、C では、デフォルトの例外処理メカニズムは一部の既知の例外タイプのみをキャッチし、カスタム例外タイプを処理できません。そこでこの記事では、Cでカスタム例外処理機構を実装する方法を紹介します。
カスタム例外クラス
まず、特定の例外タイプを表すカスタム例外クラスを定義する必要があります。 C では、std::Exception クラスを継承することで独自の例外クラスを定義できます。単純なカスタム例外クラスの例を次に示します。
#include <exception> #include <string> class MyException : public std::exception { public: MyException(const std::string& msg) : m_msg(msg) {} virtual const char* what() const noexcept override { return m_msg.c_str(); } private: std::string m_msg; };
上記のコードでは、MyException というカスタム例外クラスを定義しました。このクラスは std::Exception クラスを継承し、このクラスの what() メソッドを実装します。このメソッドは、例外の詳細を返すために使用されます。
カスタム例外をスローする
カスタム例外クラスを使用する場合は、最初にこのクラスのオブジェクトをインスタンス化し、次に throw キーワードを使用してそれをスローする必要があります。たとえば、次のコードを使用して、プログラムでカスタム例外をスローできます。
throw MyException("Something wrong happened!");
カスタム例外のキャッチ
カスタム例外をキャッチするときは、try-catch ステートメント ブロックを使用する必要があります。 。たとえば、次のコードは、MyException をキャッチする方法を示しています。
try { // some code that may throw MyException } catch (const MyException& e) { // handle the exception here std::cerr << "Caught MyException with message: " << e.what() << ' '; }
プログラムが try ステートメント ブロックで MyException タイプの例外をスローした場合、catch ステートメント ブロックは例外をキャプチャし、対応する例外処理コードを実行します。
カスタム例外処理関数
カスタム例外をより適切に処理するために、すべての種類の例外を処理する関数を定義できます。たとえば、次のコードでは、すべての種類の例外を処理するために handleException という名前の関数を定義します。
#include <iostream> void handleException(const std::exception& e) noexcept { std::cerr << "Caught exception with message: " << e.what() << ' '; } int main() { try { // some code that may throw an exception } catch (const std::exception& e) { handleException(e); } }
上記のコードでは、handleException という名前の関数を使用して、すべての種類の異常な例外を処理します。プログラム内で何らかの例外がスローされた場合、その例外は handleException 関数に渡されて処理されます。
概要
C では、カスタム例外処理メカニズムは非常に便利なテクニックであり、プログラム内の例外をより適切に処理し、プログラムのクラッシュや不明な例外のスローを回避するのに役立ちます。この記事では、独自の例外クラスを定義し、try-catch ステートメント ブロックを使用してカスタム例外をキャッチして処理する方法を紹介しました。同時に、プログラムの例外処理ロジックをより適切に編成および管理するために、あらゆる種類の例外を処理する関数を定義する方法も紹介しました。
以上がC++ でカスタム例外処理メカニズムを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。