Computer >> Máy Tính >  >> Lập trình >> C ++

Các ngoại lệ hoạt động như thế nào trong C ++

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 mà chúng ta có thể sử dụng bên trong các chương trình của mình. Sự sắp xếp của phân cấp lớp cha-con đã được hiển thị bên dưới -

Các ngoại lệ hoạt động như thế nào trong C ++

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.