Trong C ++, Xử lý ngoại lệ là một quy trình để xử lý các lỗi thời gian chạy. Ngoại lệ là một sự kiện được ném vào thời gian chạy trong C ++. Tất cả các ngoại lệ đều có nguồn gốc từ lớp std ::exception. Đó là một lỗi thời gian chạy có thể được xử lý. Nó in thông báo ngoại lệ và kết thúc chương trình, nếu chúng tôi không xử lý ngoại lệ.
Các ngoại lệ được định nghĩa trong tiêu chuẩn C ++ là lớp
Các lớp ngoại lệ phổ biến trong C ++ là:
Ngoại lệ | Mô tả |
---|---|
std ::exception | Đây là một ngoại lệ và là lớp cha của tất cả các ngoại lệ C ++ tiêu chuẩn. |
std ::bad_cast | Đây là một ngoại lệ do dynamic_cast đưa ra. |
std ::bad_exception | Ngoại lệ này được sử dụng để xử lý các ngoại lệ không mong muốn trong chương trình C ++. |
std ::bad_alloc | Nó thường được ném bởi cái mới. |
std ::logic_failure | Có thể phát hiện ngoại lệ này bằng cách đọc mã. |
std ::runtime_error | Không thể phát hiện ngoại lệ này bằng cách đọc mã |
std ::bad_typeid | Đây là một ngoại lệ do typeid ném ra. |
Từ khóa:
Có 3 từ khóa trong xử lý ngoại lệ:thử, bắt và ném.
Thử / Bắt khối:
Trong C ++, xử lý ngoại lệ được thực hiện bằng cách sử dụng câu lệnh try / catch. Mã có thể xảy ra ngoại lệ được sử dụng để đặt bởi khối Thử. Khối bắt được sử dụng để xử lý ngoại lệ.
Mã mẫu
#include <iostream> using namespace std; class Sample1 { public: Sample1() { cout << "Construct an Object of sample1" << endl; } ~Sample1() { cout << "Destruct an Object of sample1" << endl; } }; class Sample2 { public: Sample2() { int i=7; cout << "Construct an Object of sample2" << endl; throw i; } ~Sample2() { cout << "Destruct an Object of sample2" << endl; } }; int main() { try { Sample1 s1; Sample2 s2; } catch(int i) { cout << "Caught " << i << endl; } }
Đầu ra
Construct an Object of sample1 Construct an Object of sample2 Destruct an Object of sample1 Caught 7
Ngoại lệ do người dùng xác định:
Chúng ta có thể xác định các ngoại lệ của riêng mình bằng cách kế thừa và ghi đè các chức năng của lớp ngoại lệ.
Mã mẫu
#include <iostream> #include <exception> using namespace std; struct DivideByZero : public exception { const char * what () const throw () { return "My Exception"; } }; int main() { try { throw DivideByZero(); } catch(DivideByZero& e) { cout << "Exception caught" << endl; cout << e.what() << endl; } catch(exception& e) { } }
Đầu ra
Exception caught My Exception what() = A public method provided by exception class and it has been overridden by all the child exception classes. It returns the cause of an exception.