首頁  >  文章  >  後端開發  >  C++程式範例,展示異常處理

C++程式範例,展示異常處理

WBOY
WBOY轉載
2023-09-05 16:53:051234瀏覽

C++程式範例,展示異常處理

假設有一個函數用來計算一些複雜的數學運算。但在運算過程中,可能會發生一些異常。我們必須處理可能發生的不同類型的異常,並執行以下操作。

  • 如果電腦無法為計算分配內存,我們必須列印「記憶體不足!」
  • 如果發生任何其他與C 相關的異常,我們必須列印「異常:」然後是異常訊息。
  • 如果發生其他情況,我們印出「未處理的異常」。

我們有一個包含一對值的數組,並將其傳遞給函數。如果發生任何異常,我們處理它,否則列印輸出值。

我們只需要處理異常,而不考慮函數產生異常的機制。

因此,如果輸入是arr = {{361643035132, 2297873642249}, {-17, 15}};,那麼輸出將是-

Memory Low!
Exception: val1 is negative

第一對值太大而無法處理,所以列印出「記憶體不足」。第二對值的第一個值是負數。提供的函數無法處理,因此生成/拋出異常“val1為負數”,

為了解決這個問題,我們將按照以下步驟進行操作−

  • 初始化i := 0,當i ##val1 := values[i, 0]
  • val2 := values[i, 1]
  • 嘗試,
    • 列印(foo(val1, val2))
  • #如果無法分配記憶體(捕獲到bad_alloc例外),則
    • #列印「記憶體不足!」
  • 否則,如果捕獲到任何其他標準C 異常e,則
    • 列印「異常:」
    • 列印異常的詳細資訊
  • 否則,如果捕獲到任何其他異常,則
    • 列印「未處理的異常」
##範例

讓我們看一下以下實現,以便更好地理解−

#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);
}

輸入

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

輸出

Memory Low!
Exception: val1 is negative

以上是C++程式範例,展示異常處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除