Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ minh họa xử lý ngoại lệ

Giả sử có một hàm thực hiện các phép tính toán học phức tạp. Trong quá trình đó, có thể xảy ra các ngoại lệ. Chúng ta phải xử lý các loại ngoại lệ sau:

  • Nếu máy tính không thể cấp phát bộ nhớ: in "Memory Low!"
  • Nếu xảy ra ngoại lệ chuẩn C++ khác: in "Exception:" kèm chi tiết
  • Ngoại lệ khác: in "Unhandled Exception"

Chúng ta được cung cấp mảng chứa các cặp giá trị, truyền vào hàm. Xử lý ngoại lệ hoặc in kết quả.

Ví dụ: arr = {{361643035132, 2297873642249}, {-17, 15}}; kết quả: "Memory Low! Exception: val1 is negative". Cặp đầu quá lớn gây bad_alloc, cặp thứ hai val1 âm ném invalid_argument.

Giải thuật

  • Duyệt qua từng cặp giá trị
  • Trong khối try: gọi foo(val1, val2) và in kết quả
  • catch (bad_alloc): in "Memory Low!"
  • catch (exception &e): in "Exception: " + e.what()
  • catch (...): in "Unhandled Exception"

Ví dụ minh họa

#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 = values[i][0]; 
        long long 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