×

Xử lý lỗi với khối try trong C++

Việc xử lý lỗi trong lập trình là một khía cạnh cực kỳ quan trọng để đảm bảo ứng dụng hoạt động ổn định và đáng tin cậy. Trong ngôn ngữ lập trình C++, một trong những cách tiếp cận phổ biến nhất để xử lý lỗi là sử dụng các khối try, catchthrow. Bài viết này sẽ tìm hiểu sâu hơn về cách thức hoạt động và sử dụng các khối này để quản lý lỗi trong chương trình.

Cấu trúc của khối try, catchthrow

Khối try được sử dụng để bao quanh đoạn mã có khả năng sinh ra lỗi. Bên trong khối này, chúng ta có thể viết các đoạn mã mà mình mong muốn nếu có lỗi xảy ra thì sẽ được xử lý một cách cụ thể. Nếu trong khối try xảy ra một lỗi, chương trình sẽ tìm kiếm và thực thi khối catch tương ứng.

Khối catch sẽ bắt và xử lý lỗi cụ thể mà bạn mong muốn. Câu lệnh catch đi kèm với loại lỗi mà nó có thể bắt, điển hình là các class ngoại lệ hoặc kiểu dữ liệu cụ thể.

Câu lệnh throw được sử dụng để phát sinh lỗi và truyền lỗi đó ra ngoài để các khối catch có thể bắt và xử lý. Nó được dùng với một đối tượng hoặc giá trị mà người dùng muốn truyền đi khi lỗi xảy ra.

Ví dụ Sử dụng

Dưới đây là ví dụ với cách sử dụng của try, catchthrow:

#include <iostream>
using namespace std;

void mayCauseError(int number) {
    if (number == 0) {
        throw runtime_error("Division by zero error!");
    }
    cout << "Result: " << (100 / number) << endl;
}

int main() {
    int num;
    cout << "Enter a number: ";
    cin >> num;

    try {
        mayCauseError(num);
    } catch (const runtime_error &e) {
        cout << "Caught an exception: " << e.what() << endl;
    }

    return 0;
}

Bắt Nhiều Loại Ngoại Lệ

Bạn có thể bắt nhiều loại ngoại lệ khác nhau bằng cách sử dụng nhiều khối catch liên tiếp:

try {
    mayCauseError(num);
} catch (const runtime_error &e) {
    cout << "Caught a runtime error: " << e.what() << endl;
} catch (const exception &e) {
    cout << "Caught a general exception: " << e.what() << endl;
}

Nếu có nhiều loại ngoại lệ có thể xảy ra trong khối try, bạn nên đảm bảo rằng các khối catch được viết đúng thứ tự từ các ngoại lệ cụ thể nhất đến các ngoại lệ tổng quát hơn.

Tạo Ngoại Lệ Tùy Chỉnh

Trong C++, bạn cũng có thể tạo các ngoại lệ tùy chỉnh bằng cách kế thừa từ lớp exception. Điều này giúp bạn có thể phát sinh và bắt các ngoại lệ phù hợp với ngữ cảnh cụ thể của ứng dụng.

class CustomException : public exception {
public:
    const char* what() const noexcept override {
        return "Custom exception occurred!";
    }
};

void customErrorFunc() {
    throw CustomException();
}

int main() {
    try {
        customErrorFunc();
    } catch (const CustomException &e) {
        cout << "Caught a custom exception: " << e.what() << endl;
    } catch (const exception &e) {
        cout << "Caught a general exception: " << e.what() << endl;
    }

    return 0;
}

Kết Luận

Sử dụng các khối try, catch, và throw trong C++ giúp bạn kiểm soát và xử lý lỗi một cách rõ ràng và hiệu quả. Việc hiểu và áp dụng đúng các cấu trúc này sẽ giúp cho ứng dụng của bạn hoạt động ổn định hơn, và dễ dàng hơn trong việc tìm lỗi và bảo trì mã nguồn.

Comments