C++ Exceptions

Giới thiệu về C++ Exceptions

Trong lập trình C++, exception (ngoại lệ) là một cơ chế được sử dụng để xử lý lỗi trong chương trình. Khi một sự kiện lỗi xảy ra, chương trình có thể "ném" một ngoại lệ, và việc "bắt" ngoại lệ này sẽ cho phép chương trình tiếp tục chạy mà không bị dừng lại đột ngột.

Định nghĩa

Exception là một cách để báo cáo về các sự kiện không mong đợi xảy ra trong quá trình thực thi chương trình, chẳng hạn như lỗi thao tác trên tệp, chia cho 0, hoặc các vấn đề liên quan đến bộ nhớ. C++ cung cấp một cú pháp riêng để xử lý ngoại lệ thông qua các từ khóa try, catch, và throw.

Cú pháp

Cách sử dụng cơ bản của ngoại lệ trong C++ bao gồm ba phần chính:

try {
    // Mã có thể gây ra lỗi
} catch (type variable) {
    // Xử lý lỗi
} throw some_value; // Ném ngoại lệ

Ví dụ 1: Sử dụng do-while để nhập số nguyên

#include 
#include 

int main() {
    int number;
    while (true) {
        try {
            std::cout << "Nhập một số nguyên: ";
            std::cin >> number;
            if (std::cin.fail()) {
                throw std::invalid_argument("Đầu vào không phải là số nguyên.");
            }
            break; // Thoát khỏi vòng lặp nếu nhập hợp lệ
        } catch (const std::invalid_argument& e) {
            std::cout << "Lỗi: " << e.what() << std::endl;
            std::cin.clear(); // Xóa cờ lỗi
            std::cin.ignore(std::numeric_limits::max(), '\n'); // Bỏ qua dòng
        }
    }
    std::cout << "Số bạn đã nhập: " << number << std::endl;
    return 0;
}

Ví dụ 2: Ném và bắt ngoại lệ tùy chỉnh

#include 
#include 

class MyException : public std::exception {
public:
    const char* what() const noexcept override {
        return "Ngoại lệ tùy chỉnh MyException đã xảy ra.";
    }
};

void mightGoWrong() {
    bool errorOccurred = true; // Giả sử có lỗi xảy ra
    if (errorOccurred) {
        throw MyException();
    }
}

int main() {
    try {
        mightGoWrong();
    } catch (const MyException& e) {
        std::cout << "Đã bắt được lỗi: " << e.what() << std::endl;
    }
    return 0;
}

Kết luận

Exception trong C++ là một công cụ mạnh mẽ giúp quản lý lỗi và điều kiện không mong muốn. Việc sử dụng đúng các cú pháp try, catch, và throw có thể giúp cho mã nguồn trở nên sạch đẹp hơn và dễ bảo trì hơn. Tuy nhiên, việc lạm dụng ngoại lệ cũng không phải là tốt, vì vậy hãy sử dụng chúng một cách hợp lý.