Phụ lục 1: Xử lý lỗi
Số trang: 8
Loại file: doc
Dung lượng: 50.50 KB
Lượt xem: 12
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bắt đầu từ phiên bản 3.0, C++ cung cấp cơ chế xử lý lỗi(exception handling) do người sử dụng điều hành. Trong chương trìnhcó thể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi bằng cáchsử dụng từ khoá throw. Khi có lỗi, việc xử lý bị ngắt và quyền điềukhiển sẽ trao trả cho đoạn xử lý lỗi mà người sử dụng bắt được.
Nội dung trích xuất từ tài liệu:
Phụ lục 1: Xử lý lỗiPhô lôc 2: Xö lý lçi Phụ lục 2 Xử lý lỗi Bắt đầu từ phiên bản 3.0, C++ cung cấp cơ chế xử lý lỗi(exception handling) do người sử dụng điều hành. Trong chương trìnhcó thể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi bằng cáchsử dụng từ khoá throw. Khi có lỗi, việc xử lý bị ngắt và quyền điềukhiển sẽ trao trả cho đoạn xử lý lỗi mà người sử dụng bắt được.1. Bẫy và bắt lỗi Ta lấy ví dụ viết một hàm tính giá trị của một phân số với đầuvào là tử số và mẫu số. Rắc rối sẽ nảy sinh khi người sử dụng hàmtruyền vào cho mẫu số giá trị bằng 0. Để giải quyết trường hợp này,C++ sẽ tự động tạo sinh bẫy lỗi “gặp trường hợp mẫu số bằng 0”. Sauđây là chương trình ví dụ cho hàm tính giá trị phân số có xử lýlỗi.#include // lớp kiểu lỗi mà không có thành phần nàoclass Loi_Chia_0 {};float GiaTriPS(int ts, int ms){ // phát lỗi nếu mẫu = 0 if ( ms==0 ) throw( Loi_Chia_0 ); return float(ts)/ms;}void main(){ int ts, ms; cout ts; cout > ms; try { // thực hiện có bắt lỗi float gt = GiaTriPS(ts, ms); cout Phô lôc 2: Xö lý lçiTinh gia tri phan soTS = 1MS = 0Loi: Mau so bang 0 Chương trình này có hai phần bẫy lỗi và bắt lỗi. Hàm tính phânsố sẽ phát sinh một bẫy lỗi bằng từ khoá throw khi mẫu số bằng 0.Phía sau từ khoá throw là đối tượng thuộc lớp phục vụ bắt lỗi. ởđây ta sử dụng lớp Loi_Chia_0 không có thành phần nào bên trong đểphục vụ cho việc bắt lỗi này. Khi một lỗi được phát sinh, toàn bộnhững lệnh tiếp theo trong hàm xử lý bị huỷ bỏ. Trong thân chươngtrình chính chúng ta sử dụng cấu trúc try... catch... để bắt lỗi. HàmGiaTriPS được đặt trong try, do vậy khi nó phát sinh lỗi (lỗi loạiLoi_Chia_0 được phát sinh khi mẫu số truyền vào là 0) thì chươngtrình dừng hoạt động và trao quyền điều khiển cho đoạn mã bắt lỗinày. Ta đã dùng catch ( Loi_Chia_0 ) để bắt lỗi. Như vậy, khi có mộtlỗi chia 0 thì chương trình sẽ in ra dòng thông báo “Loi: Mau sobang 0”. Khi trong chương trình có một lỗi phát sinh mà không cóđoạn bắt lỗi tương ứng thì chương trình sẽ tự động kết thúc bấtthường. Điều này sẽ gây trở ngại đáng kể cho việc gỡ rối chươngtrình. Một chương trình có thể phát sinh nhiều loại lỗi khác nhau. Loạilỗi phát sinh thể hiện ở kiểu lớp lỗi được sử dụng trong các lệnhthrow. Do vậy, ta cũng có thể sử dụng nhiều lần catch để bắt cácloại lỗi khác nhau trong một chương trình như trong ví dụ sau.#include class Loi_A {};class Loi_B {};void PhatLoi(int i){// neu i khac 0 thi phat Loi_A con khong Loi_Bif (i) throw ( Loi_A );throw ( Loi_B );}void main(){ int i; cout > i; try { PhatLoi( i ); } catch ( Loi_A ) { cout Phô lôc 2: Xö lý lçi catch ( Loi_B ) { cout ms; try { float gt = GiaTriPS(ts, ms); cout Phô lôc 2: Xö lý lçi}Tinh gia tri phan soTS = 1MS = 0Loi chia 1 cho 02. Hoạt động của chương trình khi một lỗi phát sinh Khi một lỗi trong chương trình đã bị bắt thì chương trình tiếptục hoạt động bình thường theo mã lệnh xử lý lỗi bắt được. Trongmột hàm xử lý người sử dụng có thể bắt lỗi xảy ra và sau đó tiếptục ném nó để duy trì lỗi của chương trình bằng từ khoá throw màkhông có kiểu loại lỗi phía sau.#include class Loi {};void PhatLoi(){throw ( Loi );}void BatLoi(){ try { PhatLoi(); } catch ( Loi ) { cout Phô lôc 2: Xö lý lçi#include class Loi {};void KetThucLoi(){ cout Phô lôc 2: Xö lý lçi cout Phô lôc 2: Xö lý lçipublic: int cs; Loi_TC(int i): cs(i) {} void InLoi() { cout Phô lôc 2: Xö lý lçi -230-
Nội dung trích xuất từ tài liệu:
Phụ lục 1: Xử lý lỗiPhô lôc 2: Xö lý lçi Phụ lục 2 Xử lý lỗi Bắt đầu từ phiên bản 3.0, C++ cung cấp cơ chế xử lý lỗi(exception handling) do người sử dụng điều hành. Trong chương trìnhcó thể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi bằng cáchsử dụng từ khoá throw. Khi có lỗi, việc xử lý bị ngắt và quyền điềukhiển sẽ trao trả cho đoạn xử lý lỗi mà người sử dụng bắt được.1. Bẫy và bắt lỗi Ta lấy ví dụ viết một hàm tính giá trị của một phân số với đầuvào là tử số và mẫu số. Rắc rối sẽ nảy sinh khi người sử dụng hàmtruyền vào cho mẫu số giá trị bằng 0. Để giải quyết trường hợp này,C++ sẽ tự động tạo sinh bẫy lỗi “gặp trường hợp mẫu số bằng 0”. Sauđây là chương trình ví dụ cho hàm tính giá trị phân số có xử lýlỗi.#include // lớp kiểu lỗi mà không có thành phần nàoclass Loi_Chia_0 {};float GiaTriPS(int ts, int ms){ // phát lỗi nếu mẫu = 0 if ( ms==0 ) throw( Loi_Chia_0 ); return float(ts)/ms;}void main(){ int ts, ms; cout ts; cout > ms; try { // thực hiện có bắt lỗi float gt = GiaTriPS(ts, ms); cout Phô lôc 2: Xö lý lçiTinh gia tri phan soTS = 1MS = 0Loi: Mau so bang 0 Chương trình này có hai phần bẫy lỗi và bắt lỗi. Hàm tính phânsố sẽ phát sinh một bẫy lỗi bằng từ khoá throw khi mẫu số bằng 0.Phía sau từ khoá throw là đối tượng thuộc lớp phục vụ bắt lỗi. ởđây ta sử dụng lớp Loi_Chia_0 không có thành phần nào bên trong đểphục vụ cho việc bắt lỗi này. Khi một lỗi được phát sinh, toàn bộnhững lệnh tiếp theo trong hàm xử lý bị huỷ bỏ. Trong thân chươngtrình chính chúng ta sử dụng cấu trúc try... catch... để bắt lỗi. HàmGiaTriPS được đặt trong try, do vậy khi nó phát sinh lỗi (lỗi loạiLoi_Chia_0 được phát sinh khi mẫu số truyền vào là 0) thì chươngtrình dừng hoạt động và trao quyền điều khiển cho đoạn mã bắt lỗinày. Ta đã dùng catch ( Loi_Chia_0 ) để bắt lỗi. Như vậy, khi có mộtlỗi chia 0 thì chương trình sẽ in ra dòng thông báo “Loi: Mau sobang 0”. Khi trong chương trình có một lỗi phát sinh mà không cóđoạn bắt lỗi tương ứng thì chương trình sẽ tự động kết thúc bấtthường. Điều này sẽ gây trở ngại đáng kể cho việc gỡ rối chươngtrình. Một chương trình có thể phát sinh nhiều loại lỗi khác nhau. Loạilỗi phát sinh thể hiện ở kiểu lớp lỗi được sử dụng trong các lệnhthrow. Do vậy, ta cũng có thể sử dụng nhiều lần catch để bắt cácloại lỗi khác nhau trong một chương trình như trong ví dụ sau.#include class Loi_A {};class Loi_B {};void PhatLoi(int i){// neu i khac 0 thi phat Loi_A con khong Loi_Bif (i) throw ( Loi_A );throw ( Loi_B );}void main(){ int i; cout > i; try { PhatLoi( i ); } catch ( Loi_A ) { cout Phô lôc 2: Xö lý lçi catch ( Loi_B ) { cout ms; try { float gt = GiaTriPS(ts, ms); cout Phô lôc 2: Xö lý lçi}Tinh gia tri phan soTS = 1MS = 0Loi chia 1 cho 02. Hoạt động của chương trình khi một lỗi phát sinh Khi một lỗi trong chương trình đã bị bắt thì chương trình tiếptục hoạt động bình thường theo mã lệnh xử lý lỗi bắt được. Trongmột hàm xử lý người sử dụng có thể bắt lỗi xảy ra và sau đó tiếptục ném nó để duy trì lỗi của chương trình bằng từ khoá throw màkhông có kiểu loại lỗi phía sau.#include class Loi {};void PhatLoi(){throw ( Loi );}void BatLoi(){ try { PhatLoi(); } catch ( Loi ) { cout Phô lôc 2: Xö lý lçi#include class Loi {};void KetThucLoi(){ cout Phô lôc 2: Xö lý lçi cout Phô lôc 2: Xö lý lçipublic: int cs; Loi_TC(int i): cs(i) {} void InLoi() { cout Phô lôc 2: Xö lý lçi -230-
Tìm kiếm theo từ khóa liên quan:
công nghệ thông tin kỹ thuật lập trình tài liệu tin học vi tính lập trình C++ Xử lý lỗiTài liệu liên quan:
-
52 trang 432 1 0
-
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 318 0 0 -
74 trang 302 0 0
-
96 trang 297 0 0
-
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 290 0 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 284 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 277 0 0 -
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 269 1 0 -
Tài liệu hướng dẫn sử dụng thư điện tử tài nguyên và môi trường
72 trang 268 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 267 0 0