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à -
Sr.No. | Ngoại lệ &Mô tả |
---|---|
1 | std ::ngoại lệ Đâ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. |
2 | std ::bad_cast Nó là một ngoại lệ do dynamic_cast ném ra. |
3 | 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 ++. |
4 | std ::bad_alloc Nó thường được ném bởi cái mới. |
5 | std ::logic_failure Ngoại lệ này có thể được phát hiện bằng cách đọc mã. |
6 | std ::runtime_error Ngoại lệ này không thể được phát hiện bằng cách đọc mã. |
7 | std ::bad_typeid Nó là một ngoại lệ được ném bởi typeid. |
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.