Chương 7 Kiểm soát lỗi C++

17 340 1
Chương 7 Kiểm soát lỗi C++

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Phần 2: Ngôn ngữ lập trình C++ Chương 7: Cơ chế kiểm soát và xử lý các ngoại lệ Các nội dung chính 1. Giới thiệu 2. Cơ chế bẫy và bắt ngoại lệ 3. Hoạt động của chương trình khi xuất hiện ngoại lệ ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 2 1. Giới thiệu • Các loại lỗi trong chương trình – Lỗi cú pháp (syntax errors) – Lỗi chạy (runtime errors): • Sai giải thuật • Không tính hết các khả năng của bài toán • Hiểu sai hoặc không đầy đủ các lệnh • Các giải pháp khắc phục – Giải pháp phòng chống: cung cấp các cơ chế hạn chế khả năng xuất hiện soát lỗi, hoặc đơn giản hóa việc xử lý khi có lỗi xảy ra – Giải pháp xử lý: tìm và cô lập lỗi, sửa lỗi ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 3 1. Giới thiệu • Xử lý lỗi trong C: chưa có các biện pháp phòng chống cũng như đơn giản hóa việc xử lý lỗi. Hoàn toàn phụ thuộc vào người lập trình  người lập trình phải gánh thêm trách nhiệm xử lý lỗi. • Xử lý lỗi trong C++: đưa vào cơ chế “bẫy và bắt lỗi” (try throw catch) nhằm tăng cường khả năng cũng như đơn giản hóa việc xử lý lỗi ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 4 1. Giới thiệu ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 5 int main () { if (doing something OK){ Chạy trường hợp bình thường } else { //Trường hợp có lỗi Xử lý lỗi } … } int main () { try { Chạy như trường hợp bình thường; Nếu có lỗi thì nó sẽ tự động bị ném (throw) sang nhánh catch; } catch { //Trường hợp bắt lỗi Gọi thao tác xử lý lỗi mặc định Xử lý thêm nếu cần } … } Xử lý lỗi trong C Xử lý lỗi trong C++ 2. Cơ chế bẫy và bắt lỗi • Giới thiệu cơ chế: – Nhằm xử lý các ngoại lệ (exception): là các trường hợp đặc biệt mà có thể cần các xử lý riêng – Các ngoại lệ này thường được giao cho một số lớp hay đối tượng chuyên dụng xử lý – Gồm có 3 phần: try – throw – catch ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 6 2. Cơ chế bẫy và bắt lỗi • Đối với mỗi hàm có chứa các ngoại lệ, cơ chế này có 2 giai đoạn: – Khi cài đặt hàm – Khi gọi sử dụng hàm ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 7 2. Cơ chế bẫy và bắt lỗi • Khi cài đặt hàm – Đầu tiên, phải xác định các trường hợp có ngoại lệ, từ đó xác định đối tượng sẽ xử lý các ngoại lệ đó (một hàm có thể yêu cầu một hoặc nhiều đối tượng xử lý các ngoại lệ) – Sau đó với mỗi trường hợp ngoại lệ, dùng lệnh throw để ném trường hợp đó cho một đối tượng để xử lý – Cài đặt lớp mà chứa đối tượng xử lý trên ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 8 void f_except(){ if (OK) { Trường hợp bình thường} else if (except1) throw obj_exc1; else if (except2) throw obj_exc2; } 2. Cơ chế bẫy và bắt lỗi • Khi gọi sử dụng hàm: – Đặt lời gọi hàm này trong khối lệnh try – Khối lệnh try này hoạt động theo nguyên tắc: • Nếu không gặp ngoại lệ nào thì nó hoạt động bình thường • Nếu gặp một ngoại lệ thì nó tự động dừng lệnh này tại điểm gặp ngoại lệ, rồi chuyển đến khối lệnh catch mà chứa đối tượng xử lý ngoại lệ phù hợp ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 9 int main () { try { f_except(); /*Hàm này có chứa các exception cần xử lý. Nếu có gặp các exception trên thì nó sẽ tự động bị ném (throw) cho đối tượng xử lý các exception nằm ở nhánh catch*/ } catch { //Trường hợp bắt lỗi Gọi thao tác xử lý lỗi mặc định Xử lý thêm nếu cần } … } Ví dụ 1: hàm có 1 ngoại lệ ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 10 #include <iostream> #include <math.h> using namespace std; //Lớp xử lý ngoại lệ class Loi_He_So_A { public: Loi_He_So_A(){ cout<<"He so a = 0"<<endl; } }; int PTB2(float a, float b, float c, float &x1,float &x2) { //Có ngoại lệ, ném nó cho lớp xử lý ngoại lệ if (a==0) throw Loi_He_So_A(); float d = b*b - 4*a*c; if (d<0) return 0; else if (d==0) { x1=x2=-b/2/a; return 1; } else { x1= (-b-sqrt(d))/2/a; x2= (-b+sqrt(d))/2/a; return 2; } } [...]... ĐTTH Chương 7: Kiểm soát ngoại lệ 14 Ví dụ • Chạy lại 2 ví dụ trên, nhưng bây giờ không đặt lời gọi hàm PTB2 trong khối lệnh try, đồng thời định nghĩa thêm 1 hàm để đặt trong câu lệnh set_terminate để hiểu thêm về cơ chế hoạt động của chương trình khi xuất hiện ngoại lệ ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 15 Bài tập • Bài 1: Mở rộng các bài tập về danh sách trong chương. .. vào các xử lý ngoại lệ: – Lấy ra một phần tử từ danh sách đã rỗng – Bổ sung một phần tử vào danh sách đã đầy ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 16 Xin cảm ơn! ĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Chương 7: Kiểm soát ngoại lệ 17 ... co loi! Chương 7: Kiểm soát ngoại lệ 13 3 Hoạt động của chương trình khi xuất hiện ngoại lệ • Khi gọi một hàm mà có xuất hiện ngoại lệ, có 1 trong 2 khả năng xảy ra: – Nếu hàm đó được đặt trong khối lệnh bắt ngoại lệ try, thì ngoại lệ đó sẽ bị bắt và chuyển cho đối tượng xử lý ngoại lệ đó – Trái lại, chương trình sẽ kết thúc bất thường Nếu có câu lệnh set_terminate(f) thì trước khi kết thúc, chương. .. ngoại lệ if (a==0) throw Exception(); float d = b*b - 4*a*c; if (d

Ngày đăng: 27/03/2014, 11:55

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan