Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để chứng minh xử lý ngoại lệ

Giả sử có một hàm tính toán một số phép toán phức tạp nghiêm trọng. Nhưng trong quá trình hoạt động, một số trường hợp ngoại lệ có thể xảy ra. Chúng tôi phải xử lý các loại ngoại lệ khác nhau có thể xảy ra và thực hiện những điều sau.

  • Nếu máy tính không thể cấp phát bộ nhớ để tính toán, chúng tôi phải in 'Bộ nhớ sắp hết!'
  • Nếu xảy ra bất kỳ ngoại lệ nào khác liên quan đến C ++, chúng tôi phải in 'Exception:' sau đó là ngoại lệ.
  • Nếu có điều gì khác xảy ra, chúng tôi sẽ in "Ngoại lệ chưa được xử lý".

Chúng ta được cung cấp một mảng có chứa một cặp giá trị và chúng ta chuyển nó vào hàm. Nếu có bất kỳ ngoại lệ nào xảy ra, chúng tôi sẽ xử lý hoặc nếu không, chúng tôi sẽ in giá trị đầu ra.

Chúng tôi chỉ phải xử lý các ngoại lệ mà không quan tâm đến cơ chế của hàm tạo ra các ngoại lệ.

Vì vậy, nếu đầu vào là arr ={{361643035132, 2297873642249}, {-17, 15}};, thì đầu ra sẽ là -

Memory Low!
Exception: val1 is negative

Cặp giá trị đầu tiên quá lớn để xử lý, do đó, 'Bộ nhớ thấp' được in. Giá trị đầu tiên của cặp thứ hai là âm. Hàm được cung cấp không thể hoạt động với điều đó nên nó tạo / ném ra một ngoại lệ 'val1 là âm',

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • để khởi tạo i:=0, khi i
  • val1:=giá trị [i, 0]
  • val2:=giá trị [i, 1]
  • thử,
    • print (foo (val1, val2))
  • nếu bộ nhớ không thể được cấp phát (bắt ngoại lệ bad_alloc), thì
    • print ("Bộ nhớ sắp hết!")
  • ngược lại, nếu bắt được bất kỳ ngoại lệ C ++ tiêu chuẩn nào khác, thì
    • print ("Ngoại lệ:")
    • in chi tiết của ngoại lệ
  • ngược lại, nếu bắt gặp bất kỳ ngoại lệ nào khác, thì
    • print ("Ngoại lệ không được xử lý")

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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

Đầu vào

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

Đầu ra

Memory Low!
Exception: val1 is negative