ホームページ >バックエンド開発 >C++ >例外処理を示す C++ プログラムの例

例外処理を示す C++ プログラムの例

WBOY
WBOY転載
2023-09-05 16:53:051266ブラウズ

例外処理を示す C++ プログラムの例

複雑な数学演算を計算する関数があるとします。ただし、操作中にいくつかの例外が発生する可能性があります。発生する可能性のあるさまざまな種類の例外を処理し、次のことを実行する必要があります。

  • コンピュータが計算にメモリを割り当てることができない場合は、「メモリ不足です!」を出力する必要があります。
  • 他の C 関連の例外が発生した場合は、「例外:」を出力する必要があります。例外情報が続きます。
  • 他に何かが発生した場合は、「未処理の例外」が出力されます。

値のペアを含む配列があり、それを関数に渡します。例外が発生した場合はそれを処理し、そうでない場合は値を出力します。

関数が例外を生成するメカニズムに関係なく、例外を処理するだけで済みます。

したがって、入力が arr = {{361643035132, 2297873642249}, {-17, 15}}; の場合、出力は -

Memory Low!
Exception: val1 is negative

になります。最初の値のペアは次のとおりです。大きすぎて処理できないため、「メモリ不足」と表示されます。 2 番目の値のペアの最初の値は負の数です。提供された関数を処理できないため、例外「val1 が負です」が生成/スローされます。

この問題を解決するには、次の手順に従います。 -

  • i を初期化します。 = 0、i
  • val1 := value[i, 0]
  • val2 := value[i, 1]
  • 試してください、
    • Print(foo(val1, val2))
  • メモリを割り当てられない場合 (bad_alloc 例外がキャッチされる)、
    • Print "メモリ不足!"
  • それ以外の場合、他の標準 C 例外がキャッチされた場合は、
    • Print "Exception:"
    • Print例外の詳細
  • それ以外の場合、他の例外がキャッチされた場合は、
    • 「ハンドルされない例外」を出力します

理解を深めるために、次の実装を見てみましょう -

#include <iostream>
#include <exception>
#include <string>
#include <stdexcept>
#include <vector>
#include <cmath>
using namespace std;

class Solution {
private:
   static int value;
public:
   static int foo(long long val1, long long val2) {
      value += 1;
      if(val1 < 0) {
         throw std::invalid_argument("val1 is negative");
      }
      vector<int> vectorList(val1, 0);
      int r = -1, c = sqrt(-1);
      if(val2 == 0) throw 0;
      r = (val1 / val2) * r;
      int ans = vectorList.at(val2);
      return r + val1 - val2 * ans;
   }
   static int getVal() {
      return value;
   }
};
int Solution::value = 0;

void solve(int t, long int values[][2]) {
   for (int i = 0; i < t; i++) {
      long long val1, val2;
      val1 = values[i][0];
      val2 = values[i][1];
      try {
         cout << Solution::foo(val1, val2) << &#39;\n&#39;;
      }
      catch (const std::bad_alloc&) {
         cout << "Memory Low!\n";
      }
      catch (const std::exception& e) {
         cout << "Exception: " << e.what() << &#39;\n&#39;;
      }
      catch (...) {
         cout << "Unhandled Exception\n";
      }
   }
}
int main() {
   long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
   solve(2, arr);
}

Input

long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
solve(2, arr);

Output

Memory Low!
Exception: val1 is negative

以上が例外処理を示す C++ プログラムの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。