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

Kiến thức cơ bản về xử lý ngoại lệ 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:

Kiến thức cơ bản về xử lý ngoại lệ trong C ++

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.