Ngôn ngữ lập trình - Chương 7 (HUST)

LI
lienhejb
0 téléchargements
17
0

Contenu du document

Page 1

goupee.vn goupee.com 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 cuu duong than cong . comngoại lệ fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 2

goupee.vn goupee.com 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ệ cuu duong than cong . com ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 2 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 3

goupee.vn goupee.com 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 xcuu duong than cong . comử 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ộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 3 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 4

goupee.vn goupee.com 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 khcuu duong than cong . comả năng cũng như đơn giản hóa việc xử lý lỗi ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 4 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 5

goupee.vn goupee.com 1. Giới thiệu Xử lý lỗi trong C Xử lý lỗi trong C++ int main () { try { int main () { Chạy như trường hợp bình thường; if (doing something OK){ Nếu có lỗi thì nó sẽ tự động Chạy trường hợp bình thường bị ném (throw) sang } nhánh catch; else { //Trường hợp có lỗi } Xử lý lỗi 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 cuu duong than cong . com} … } ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 5 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 6

goupee.vn goupee.com 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 cuu duong than cong . com ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 6 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 7

goupee.vn goupee.com 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 cuu duong than cong . com ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 7 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 8

goupee.vn goupee.com 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 void f_except(){ tượng sẽ xử lý các ngoại lệ if (OK) { Trường hợp bình đó (một hàm có thể yêu thường} cầu một hoặc nhiều đối else tượng xử lý các ngoại lệ) if (except1) throw obj_exc1; – Sau đó với mỗi trường else hợp ngoại lệ, dùng lệnh if (except2) throw obj_exc2; throw để ném trường hợp đó cho một đối tượng để } xử lý cuu duong than cong . com – Cài đặt lớp mà chứa đối tượng xử lý trên ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 8 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 9

goupee.vn goupee.com 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 int main () { try { – Khối lệnh try này hoạt f_except(); động theo nguyên tắc: /*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ó • Nếu không gặp ngoại lệ sẽ tự động bị ném (throw) cho đối tượng nào thì nó hoạt động xử lý các exception nằm ở nhánh catch*/ bình thường } catch { //Trường hợp bắt lỗi • Nếu gặp một ngoại lệ thì Gọi thao tác xử lý nó tự động dừng lệnh lỗi mặc định này tại đicuu duong than cong . comểm gặp ngoại lệ, Xử lý thêm nếu cần 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ộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 9 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 10

goupee.vn goupee.com Ví dụ 1: hàm có 1 ngoại lệ int PTB2(float a, float b, float c, float &x1,float &x2) { #include <iostream> //Có ngoại lệ, ném nó cho lớp #include <math.h> xử lý ngoại lệ using namespace std; if (a==0) throw Loi_He_So_A(); //Lớp xử lý ngoại lệ float d = b*b - 4*a*c; class Loi_He_So_A { if (d<0) return 0; public: else if (d==0) { Loi_He_So_A(){ x1=x2=-b/2/a; cout<<"He so a = 0"<<endl; return 1; } cuu duong than cong . com} else { }; x1= (-b-sqrt(d))/2/a; x2= (-b+sqrt(d))/2/a; return 2; } } ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 10 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 11

goupee.vn goupee.com Ví dụ 1: hàm có 1 ngoại lệ (tiếp) int main(int argc, char **argv) { Kết quả chạy: float a,b,c; cout<<"Nhap cac he so:"<<endl; Nhap cac he so: cout<<"a=";cin>>a; a=4 cout<<"b=";cin>>b; b=4 cout<<"c=";cin>>c; c=1 float x1,x2; try { So nghiem cua PT:1 int n = PTB2(a,b,c,x1,x2); ----- cout<<"So nghiem cua PT:"<<n; Nhap cac he so: } a=0 catch (Loi_He_So_A){cuu duong than cong . comb=4 cout<<"Da co loi he so"; c=1 } He so a = 0 return 0; Da co loi he so } ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 11 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 12

goupee.vn goupee.com Ví dụ 2: hàm có 2 ngoại lệ #include <iostream> int PTB2(float a, float b, float c, #include <math.h> float &x1,float &x2) { using namespace std; //Có ngoại lệ, ném nó cho lớp xử lý ngoại lệ //Lớp xử lý ngoại lệ if (a==0) throw Exception(); class Exception { float d = b*b - 4*a*c; public: if (d<0) throw Exception(d); Exception(){ if (d==0) { cout<<"He so a = 0"<<endl; x1=x2=-b/2/a; } return 1; Exception(float delta){ } else { cout<< “Delta am =“ <<cuu duong than cong . comx1= (-b-sqrt(d))/2/a; delta<<endl; x2= (-b+sqrt(d))/2/a; } return 2; }; } } ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 12 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 13

goupee.vn goupee.com Ví dụ 2: hàm có 2 ngoại lệ (tiếp) int main(int argc, char **argv) Kết quả chạy: { float a,b,c; Nhap cac he so: cout<<"Nhap cac he so:"<<endl; a=5 cout<<"a=";cin>>a; b=1 cout<<"b=";cin>>b; c=2 cout<<"c=";cin>>c; Delta am =-39 float x1,x2; try { Da co loi! int n = PTB2(a,b,c,x1,x2); ------- cout<<"So nghiem cua PT:"<<n; Nhap cac he so: } a=0 catch (Exception){ cuu duong than cong . comb=1 cout<<"Da co loi!"; c=2 } He so a = 0 return 0; Da co loi! } ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 13 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 14

goupee.vn3. Hoạt động của chương trình khigoupee.com 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, chcuu duong than cong . comương trình sẽ gọi hàm f. ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 14 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 15

goupee.vn goupee.com 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ệ. cuu duong than cong . com ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 15 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 16

goupee.vn goupee.com Bài tập • Bài 1: Mở rộng các bài tập về danh sách trong chương 9, bằng cách đưa thêm 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 cuu duong than cong . com ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 16 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 17

goupee.vn goupee.com Xin cảm ơn! cuu duong than cong . com ĐHBK Hà Nội - Khoa ĐTVT - Bộ fb.com/goupee.vn Chương 7: Kiểm soát ngoại lệ 17 môn ĐTTH CuuDuongThanCong.com https://fb.com/tailieudientucntt

Affichage des 17 premières pages. Téléchargez le document pour le voir en entier.

Commentaires (0)

Se connecter pour rejoindre la discussion

Aucun commentaire pour le moment. Soyez le premier !