Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

예외 처리를 보여주는 C++ 프로그램

<시간/>

심각한 복잡한 수학 연산을 계산하는 함수가 있다고 가정합니다. 그러나 작업 중에 일부 예외가 발생할 수 있습니다. 발생할 수 있는 다양한 유형의 예외를 처리하고 다음을 수행해야 합니다.

  • 컴퓨터가 계산을 위해 메모리를 할당할 수 없으면 'Memory Low!'를 인쇄해야 합니다.
  • 다른 C++ 관련 예외가 발생하면 'Exception:'을 출력한 다음 예외를 출력해야 합니다.
  • 다른 문제가 발생하면 '처리되지 않은 예외'를 출력합니다.

한 쌍의 값을 포함하는 배열이 주어지고 이를 함수에 전달합니다. 예외가 발생하면 처리하거나 그렇지 않으면 출력 값을 인쇄합니다.

예외를 생성하는 함수의 메커니즘을 무시하고 예외만 처리하면 됩니다.

따라서 입력이 arr ={{361643035132, 2297873642249}, {-17, 15}};와 같으면 출력은 -

가 됩니다.
Memory Low!
Exception: val1 is negative

첫 번째 값 쌍이 너무 커서 처리할 수 없으므로 '메모리 부족'이 인쇄됩니다. 두 번째 쌍의 첫 번째 값은 음수입니다. 제공된 함수는 이에 대해 작동하지 않으므로 'val1은 음수입니다'라는 예외를 생성/던집니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 초기화 i의 경우:=0, i
  • val1 :=값[i, 0]
  • val2 :=값[i, 1]
  • 시도하다,
    • 인쇄(foo(val1, val2))
  • 메모리를 할당할 수 없는 경우(bad_alloc 예외가 포착됨),
    • print("메모리 부족!")
  • 그렇지 않으면 다른 표준 C++ 예외 e가 포착되면
    • print("예외:")
    • 예외 세부정보 인쇄
  • 그렇지 않으면 다른 예외가 발생하면
    • 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) << '\n';
      }
      catch (const std::bad_alloc&) {
         cout << "Memory Low!\n";
      }
      catch (const std::exception& e) {
         cout << "Exception: " << e.what() << '\n';
      }
      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