C++ Nâng Cao. Xử lý ngoại lệ Try – Cast

Hello. Chào các bạn

Bài hôm nay chúng ta sẽ cùng tìm hiểu vềxử lý ngoại lệ try – cast trong c++

Trong các dự án phần mềm quy mô, try cast thường được sử dụng với mục đích để quản lý những lỗi xảy ra không mong muốn.

1. Đặt vấn đề

Try – cast – throw  là 3 từ khóa  được sử dụng để xử lý ngoại lệ, nghĩa là nó xử lý các vấn đề ngoài rìa, những vấn đề không mong muốn xảy ra.

+ Ví dụ: Phép chia một số cho 0

+ Việc cấp phát vùng nhớ không đủ.

+ Dữ liệu quá lớn gây ra hiện tượng tràn vùng nhớ.

+ Xử lý file có vấn đề….

Tất cả những vấn đề trên đều có thể xảy ra bấ kỳ một thời điểm nào, một lúc nào trong chương trình mà chúng ta không thể biết.

Và nếu không có cớ chết try – cast thì khi xảy ra lỗi như vậy, chương trình sẽ bị crash.

Nếu một chương trình mà xảy ra hiện tượng crash quá nhiều, thì đó là một phần mềm có chất lượng kém.

Do đó người ta phải tìm cách quản lý các xử lý ngoại lệ không mong muốn xảy ra.

Do đó try – cast được xử dụng.

 

2. Sử dụng try – cast
a. Sử dụng 3 từ khóa try, cast, throw.

try: nghĩa là cố thực hiện một cái gì đó.

cast: bắt sự kiện khi có ngoại lệ không mong muốn xảy ra.

throw: bắn ra một thông tin cho người dùng biết.

try

{

     // Thực hiện các khối code ở đây

}

catch (tên exception)

{

   //Xử lý thông báo ở đây

}

ví dụ như sau:

 try
 {
   int* dataArr = new int[4000000];
 }
 catch (exception& e)
 {
   cout << e.whatch();
 }

Nếu ram có dung lượng quá nhỏ, không đủ cấp phép. Thì lập tức xảy ra lỗi cấp phát vùng nhớ.

Và đó là một ngoại lệ đã xảy ra. Nên catch sẽ bắt lấy.

Catch sử dụng một exception tiêu chuẩn. Khi bắt được ngoại lệ, thì nó thực thi câu lệnh thông báo.

whatch() là một hàm có quyền truy nhập public thuộc lớp exception. Và nó được kế thừa bởi tất cả các lớp con của lớp exception. Và nó trả về nguyên nhân của ngoại lệ.

Exception là một lớp cha. Và nó có khá nhiêu lớp con kế thừa từ nó như là:

bad_alloc, bad_cast, bad_exception, logic_error

 

b.Tạo một lớp Exception mới.

Do exception là một lớp cha xử lý cho vấn đề ngoại lệ. Nên chúng ta hoàn toàn có thể định nghĩa một lớp exception của riêng chúng ta.

Ví dụ tôi định nghĩa một lớp CustomException như sau:

#include<iostream.h>;
#include<conio.h>;
using namespace std;

class CustomException : public exception
{
 const char* whatch()
 {
   throw "This is custom exception";
 }
};

int main()
{
 try
 {
 int* dataArr = new int[4000000];
 }
 catch (CustomException& e)
 {
   std::cout << e.what();
 }

_getch();
 return 0;
}

Ok. Như vậy các bạn có thể hiểu và biết cách sử dụng try – cast trong c++ để kiểm soát lỗi cho các project của mình.
Pass Pham

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.