Ngoại lệ tùy chỉnh C++

Ngoai Le Tuy Chinh C



Ngoại lệ trong C++ là một khái niệm cốt lõi. Một ngoại lệ xảy ra trong thời gian thực hiện khi chương trình gặp phải sự không nhất quán trong thời gian chạy hoặc các tình huống bất thường. Trong C++, các thuật ngữ “ném”, “thử” và “bắt” được sử dụng để xử lý hoặc bắt ngoại lệ. Lệnh ném ném được sử dụng để tạo ra ngoại lệ. Thuật ngữ “thử” dùng để ném ngoại lệ và từ khóa “bắt” biểu thị việc xử lý một ngoại lệ được phát triển bằng thuật ngữ “ném” và được ném ra bởi phần “thử”. Hãy đi sâu vào một số ví dụ để chứng minh các ngoại lệ trong C++.

Ví dụ 1: Chương trình tạo lớp ngoại lệ tùy chỉnh trong C++

Ví dụ đơn giản này được triển khai để minh họa cách xử lý và phát hiện ngoại lệ tùy chỉnh trong C++.

#include
#include
sử dụng không gian tên tiêu chuẩn ;

lớp học DemoNgoại lệ : công cộng ngoại lệ
{
ảo hằng số ký tự * ( ) hằng số ném ( )
{
trở lại 'Bắt ngoại lệ tùy chỉnh' ;
}
} ;
int chủ yếu ( )
{
DemoException dEx ;
thử
{
ném dEx ;
}
nắm lấy ( ngoại lệ & ngoại trừ )
{
cout << ngoại trừ. ( ) << kết thúc ;
}
trở lại 0 ;
}

Chúng tôi xác định tệp tiêu đề trong mã bao gồm “iostream” và “ngoại lệ”. “iostream” được gọi riêng cho luồng đầu vào và đầu ra, trong khi thư viện “ngoại lệ” được gọi để xử lý ngoại lệ. Sau đó, chúng ta tạo lớp “DemoException” bắt nguồn từ lớp “ngoại lệ” của C++. Ở đây, chúng ta đặt hàm what() ảo được sử dụng để cung cấp const char* hiển thị kết quả của thông báo lỗi được liên kết với ngoại lệ.







Sau đó, chúng ta gọi hàm main() để tạo đối tượng “dEx” của lớp “DemoException”. Sau đó, chúng ta có định nghĩa khối “thử” để đưa ra ngoại lệ nếu gặp phải. Ở đây, chúng ta ném đối tượng “dEx”.



Tiếp theo, chúng ta đặt khối “catch” để bắt ngoại lệ và xử lý nó. Chúng ta chuyển tham chiếu của ngoại lệ lớp dưới dạng tham số để bắt ngoại lệ bắt nguồn từ nó. Bên trong khối “catch”, chúng ta gọi hàm what() trên “ngoại trừ” để nhận thông báo ngoại lệ trên bảng điều khiển.



Sau khi thực hiện chương trình đã cho, thông báo ngoại lệ tùy chỉnh sẽ bị bắt và ném lên bảng điều khiển:





Ví dụ 2: Chương trình tạo ngoại lệ tùy chỉnh bằng hai lớp

Chương trình nhấn mạnh việc xử lý nhiều ngoại lệ có thể được xử lý độc lập bằng cách xác định nhiều lớp.



#include
sử dụng không gian tên tiêu chuẩn ;

lớp học đánh giá1 { } ;
lớp học đánh giá2 { } ;

int chủ yếu ( ) {
thử {
ném đánh giá1 ( ) ;
}
nắm lấy ( đánh giá1 e ) {
cout << 'Đánh giá1 ngoại lệ bị bắt!' << kết thúc ;
}
thử {
ném đánh giá2 ( ) ;
}
nắm lấy ( đánh giá2 e ) {
cout << 'Đánh giá 2 ngoại lệ bị bắt!' << kết thúc ;
}

trở lại 0 ;
}

Trong đoạn mã đã cho, chúng ta có định nghĩa của hai lớp, “Đánh giá1” và “Đánh giá2”, hiện đang trống. Sau đó, chúng ta thực hiện hàm main() của chương trình. Ở đây, chúng ta đặt khối try{} trong đó từ khóa “ném” được sử dụng để ném phiên bản của lớp “Evaluation1()”. Điều này thể hiện rằng ngoại lệ “Evaluation1” sẽ được ném ra nếu có bất kỳ ngoại lệ nào phát sinh trong chương trình bên trong khối “thử” này. Sau đó, chúng ta có khối Catch{} trong đó ngoại lệ được bắt và hiển thị thông báo về ngoại lệ.

Tương tự, chúng ta có định nghĩa về một khối try{} khác cho lớp “Evaluation2”. Bên trong khối try{} đó, chúng ta ném phiên bản của lớp “Evaluation2”. Điều này sẽ đưa ra ngoại lệ của “Đánh giá2” nếu xảy ra lỗi ở đây. Sau đó, chúng ta gọi khối Catch{} để hiển thị thông báo ngoại lệ bằng lệnh “cout” nếu ngoại lệ bị bắt trong khối này.

Hai trường hợp ngoại lệ của các khối 'thử bắt' khác nhau được đưa vào bảng điều khiển được xử lý bởi hai lớp khác nhau.

Ví dụ 3: Chương trình tạo ngoại lệ tùy chỉnh với hàm tạo

Chương trình sử dụng hàm tạo để xử lý ngoại lệ. Mặc dù chúng ta không thể lấy các giá trị từ hàm tạo, nhưng chúng ta có thể đạt được điều này bằng cách sử dụng khối “try-catch”.

#include
sử dụng không gian tên tiêu chuẩn ;

lớp học Bài kiểm tra {
int giá trị ;

công cộng :
Bài kiểm tra ( int N )
{
thử {
nếu như ( N == 0 )
giá trị = N ;
trưng bày ( ) ;
}

nắm lấy ( hằng số ký tự * điểm kinh nghiệm ) {
cout << 'Đã tìm thấy ngoại lệ \N ' ;
cout << điểm kinh nghiệm << kết thúc ;
}

}

trống rỗng trưng bày ( )
{
cout << 'Giá trị =' << giá trị << kết thúc ;
}
} ;

int chủ yếu ( )
{

Bài kiểm tra ( 0 ) ;
cout << 'Tạo lại phiên bản \N ' ;
Bài kiểm tra ( 1 ) ;
}

Trong đoạn mã đã cho, chúng ta thiết lập lớp “Kiểm tra” trong đó biến được khai báo là “val” có kiểu số nguyên. Sau đó, chúng ta có định nghĩa về hàm khởi tạo “Test()” được truyền với biến “n”. Sau đó, chúng tôi đặt khối “try-catch” trong hàm khởi tạo “Test()”. Khối try được gọi bằng câu lệnh if(). Nếu giá trị của “n” bằng 0, khối “catch” sẽ bắt ngoại lệ và thông báo ngoại lệ sẽ được đưa ra tại dấu nhắc. Giá trị của “n” được lưu trữ trong biến “val” khi chúng ta khởi tạo nó.

Sau đó, chúng ta gọi hàm display() để hiển thị giá trị được lưu trong biến “val”. Tiếp theo, chúng ta có định nghĩa về khối “catch” trong đó ngoại lệ do khối “try” ném ra sẽ được xử lý. Cuối cùng, chúng ta gọi hàm main(). Bên trong đó, chúng ta gọi hàm tạo “Test()”. Hàm tạo được kích hoạt khi đối tượng của lớp “Test()” được tạo và chỉ định với giá trị “0” mà ngoại lệ được ném ra.

Sau đó, chúng ta gọi lại lớp “Test()” để tạo một thể hiện được truyền với giá trị 1. Ở đây, hàm tạo sẽ không đưa ra bất kỳ ngoại lệ nào vì giá trị không bằng 0. Hàm display() sẽ thực thi và in giá trị của  “val”.

Ngoại lệ tùy chỉnh được đưa ra trên bảng điều khiển bằng cách gọi hàm tạo. Ngoài ra, khi điều kiện được thỏa mãn, hàm tạo sẽ thực thi mà không có bất kỳ ngoại lệ nào.

Ví dụ 4: Chương trình tạo ngoại lệ tùy chỉnh do người dùng xác định

Chương trình ở đây xử lý và bắt ngoại lệ do người dùng xác định khi được hỏi trong lời nhắc.

#include
#include
sử dụng không gian tên tiêu chuẩn ;
lớp học Bản demo của tôi : công cộng ngoại lệ {
công cộng :
hằng số ký tự * ( ) hằng số ném ( )
{
trở lại 'Ngoại lệ! Đã thử chia cho 0.! \N ' ;
}
} ;
int chủ yếu ( )
{
thử
{
int n1, n2 ;
cout << 'Nhập hai số nguyên: \N ' ;
Ăn >> n1 >> n2 ;
nếu như ( n2 == 0 )
{
MyDemo n3 ;
ném n3 ;
}
khác
{
cout << 'n1/n2 =' << n1 / n2 << kết thúc ;
}
}
nắm lấy ( ngoại lệ & trừ )
{
cout << trừ. ( ) ;
}
}

Trong đoạn mã đã cho, trước tiên chúng ta định nghĩa lớp “MyDemo()” là lớp phụ thuộc của ngoại lệ. Sau đó, chúng ta thiết lập hàm public what() với từ khóa “ảo”. Hàm what() được gọi để tìm nguyên nhân ngoại lệ trong chương trình khi hàm Throw() ném ngoại lệ đó. Sau đó, chúng ta có hàm main() trong đó các khối try-catch{} được xác định để phát hiện và xử lý ngoại lệ. Trong khối try{}, chúng ta khai báo hai biến, “n1” và “n2”, giá trị của chúng được lấy từ người dùng bằng lệnh “cin”. Khi nhận được các giá trị đối với từng biến “n1” và “n2”, điều kiện “if” sẽ kiểm tra xem biến “n2” có bằng 0 hay không. Nếu vậy, một ngoại lệ sẽ được đưa ra hoặc kết quả phép chia được trả về. Cuối cùng, chúng ta có khối Catch{} lấy tham chiếu của lớp “ngoại lệ” làm tham số được kế thừa từ nó.

Đầu ra hiển thị khi điều kiện không được đáp ứng và chương trình được thực thi mà không có ngoại lệ:

Ngoài ra, chúng tôi xác định giá trị “0” cho biến “n2” để biểu thị cách ném và bắt ngoại lệ trong chương trình.

Phần kết luận

Để kết luận, chúng tôi đã chứng minh khái niệm quan trọng của C++, đây là một ngoại lệ. Một ngoại lệ cản trở việc thực thi thường xuyên của chương trình. Đối với điều này, chúng tôi đã sử dụng các từ khóa “ném”, “thử” và “bắt” để xử lý ngoại lệ xảy ra trong chương trình. Chúng tôi đã sử dụng những từ khóa này trong các ví dụ trước để xử lý ngoại lệ theo cách khác.