C++ 関数の例外処理で例外をカプセル化するにはどうすればよいですか?

WBOY
リリース: 2024-04-15 16:45:02
オリジナル
927 人が閲覧しました

C 例外のカプセル化により、コードの可読性と保守性が向上し、エラー情報を処理ロジックから分離できます。 std::Exception を継承した例外クラスを定義することで、エラー情報をカプセル化できます。例外をスローするには throw を使用し、例外をキャッチするには try-catch を使用します。実際の場合、ファイルを読み取る関数は例外クラスを使用して、ファイルのオープンに失敗したエラーをカプセル化します。この関数を呼び出すと、例外がキャッチされ、エラー メッセージが出力されます。

C++ 函数异常处理中如何封装异常?

#C 関数の例外処理における例外のカプセル化

C 関数では、例外のカプセル化により可読性と保守性が向上します。例外をカプセル化することで、エラー情報を処理ロジックから分離し、より明確で理解しやすいコードを作成できます。

例外クラスの定義

まず、エラー情報をカプセル化する例外クラスを定義する必要があります。このクラスは、標準ライブラリの例外クラス

std::Exception から継承する必要があります。例:

class MyException : public std::exception {
public:
  MyException(const std::string& message) : std::exception(message) {}
};
ログイン後にコピー

この例外クラスは、文字列パラメーターを例外メッセージとして受け入れるコンストラクターを定義します。

関数での例外のスロー

関数で例外をスローするのは簡単です。

throw キーワードの後に​​例外オブジェクトを使用できます。

void myFunction() {
  if (someCondition) {
    throw MyException("发生了一些错误!");
  }
}
ログイン後にコピー

関数での例外の捕捉

例外を捕捉するには、 # を使用できます。 ##try

ブロックと catch ブロック: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:cpp;toolbar:false;'>int main() { try { myFunction(); } catch (MyException&amp; e) { std::cout &lt;&lt; &quot;错误:&quot; &lt;&lt; e.what() &lt;&lt; std::endl; } }</pre><div class="contentsignin">ログイン後にコピー</div></div>

実践例

ファイルを読み取り、ファイルの総数をカウントする関数を考えてみましょう。ファイル内の行:

int countLines(const std::string& filepath) {
  std::ifstream ifs(filepath);
  if (!ifs.is_open()) {
    throw MyException("无法打开文件!");
  }

  int count = 0;
  std::string line;
  while (std::getline(ifs, line)) {
    ++count;
  }
  return count;
}
ログイン後にコピー

この関数では、

MyException

クラスを使用して、ファイルのオープン失敗のエラー メッセージをカプセル化します。この関数を呼び出すと、例外をキャッチしてエラー メッセージを出力できます:

int main() {
  try {
    int lineCount = countLines("inputFile.txt");
    std::cout << "文件共 " << lineCount << " 行" << std::endl;
  }
  catch (MyException& e) {
    std::cout << "错误:" << e.what() << std::endl;
  }
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート