1. Trang chủ
  2. » Công Nghệ Thông Tin

Ngôn ngữ lập trình C++_Chuong7_KiemSoatLoi ppsx

17 345 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 101,02 KB

Nội dung

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ệ ạ ệ 2Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 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ả ử ậ ỗ ử ỗ 3Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 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ả ệ ử ỗ 4Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 1. Giới thiệu 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++ 5Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 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 6Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 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ọ ử ụ 7Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 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ặ ớ ứ ố ượ ử 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; } 8Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH 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ử ạ ệ ợ 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 } … } 9Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH Ví dụ 1: hàm có 1 ngoại lệ #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; } } 10Chương 7: Kiểm soát ngoại lệĐHBK Hà Nội - Khoa ĐTVT - Bộ môn ĐTTH [...]... co loi! 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 trình sẽ gọi hàm f Ví dụ • Chạy... 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ệ 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ử . 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. 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”ắ ỗ . 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 trình s g i ướ ế ươ ẽ ọ hàm f . 14Chương

Ngày đăng: 10/07/2014, 08:20

TỪ KHÓA LIÊN QUAN

w