Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
33
Dung lượng
464 KB
Nội dung
Lập trình hướng đối tượng Bài 7: Ngoại lệ (Exception) Nội dung Ngoại lệ gì? Cách quản lý ngoại lệ Sử dụng khối try/catch để quản lý ngoại lệ Các lớp ngoại lệ C++ Tạo lớp ngoại lệ người dùng Cách ném ném tiếp ngoại lệ Xem xét ngăn xếp ngoại lệ Ngoại lệ Exception: kiện không mong muốn xảy thực chương trình Nếu ngoại lệ xảy thực Người lập trình cung cấp mã để kết thúc chương trình Chương trình kết thúc với thông báo lỗi thích hợp Có thể bổ sung thêm mã quản lý ngoại lệ nơi xảy lỗi Quản lý ngoại lệ chương trình Hàm assert: Kiểm tra biểu thức thỏa điều kiện Nếu điều kiện không thỏa, kết thúc chương trình Thí dụ: chia cho Nếu số chia 0, assert kết thúc chương trình với thông báo lỗi Cơ chế C++ để quản lý lỗi Sử dụng khối try/catch Ngoại lệ phải ném từ khối try bị bắt khối catch C++ cung cấp hỗ trợ việc quản lý ngoại lệ thông qua phân cấp lớp Khối try/catch Các lệnh phát sinh ngoại lệ đặt khối try Khối try chứa lệnh mà không thực ngoại lệ xảy Mỗi khối try có nhiều khối catch Khối try/catch Khối catch: Xác định dạng ngoại lệ mà bắt Chứa lệnh xử lý ngoại lệ Nếu khối catch chứa phần tham số Khối catch bắt tất dạng ngoại lệ Cú pháp chung khối try/catch Khối try/catch Nếu ngoại lệ ném từ khối try Tất khối catch cho khối try bị lờ Việc thực tiếp tục với lệnh sau khối catch sau Nếu ngoại lệ ném từ khối try Các lệnh lại khối try không thực Khối try/catch Chương trình chuyển tới khối catch theo thứ tự tìm kiếm quản lý ngoại lệ tương ứng Nếu dạng ngoại lệ ném phù hợp với dạng tham số khối catch đó: Mã khối catch thực Các khối catch lại không thực 10 Sử dụng lớp ngoại lệ C++ Nếu toán tử new cung cấp nhớ Nó ném ngoại lệ bad_alloc Lớp runtime_error giải lỗi xảy thực chương trình Lớp overflow_error underflow_error Giải ngoại lệ tràn số học Dẫn xuất từ lớp runtime_error 19 Lớp ngoại lệ người dùng Người lập trình tạo lớp ngoại lệ C++ sử dụng chế cho ngoại lệ người dùng xác định ngoại lệ có sẵn Phải ném ngoại lệ người dùng xác định qua lệnh throw Mọi lớp lớp ngoại lệ 20 Ném ném tiếp ngoại lệ Khi ngoại lệ xảy khối try Điều khiển chuyển tới khối catch Trong khối catch Quản lý ngoại lệ xử lý cụ thể ngoại lệ sau ném tiếp ngoại lệ, Ném ngoại lệ khác cho môi trường 21 Ném ném tiếp ngoại lệ Cú pháp chung để ném tiếp ngoại lệ là: throw; (trong trường hợp ném tiếp ngoại lệ bắt được) hoặc: throw expression; expression giá trị hằng, biến đối tượng 22 Ném ném tiếp ngoại lệ Đối tượng ném Đối tượng cụ thể Đối tượng nặc danh Hàm xác định ngoại lệ ném khai báo sử dụng mệnh đề throw 23 Các kỹ thuật quản lý ngoại lệ Khi ngoại lệ xảy người lập trình thường có lựa chọn: Kết thúc chương trình Thêm Ghi mã để khắc phục ngoại lệ log tiếp tục 24 Kết thúc chương trình Trong số trường hợp, lựa chọn tốt kết thúc chương trình ngoại lệ xảy Thí dụ, input file không tồn chương trình thực Không thể tiếp tục thực chương trình Chương trình đưa thông báo lỗi tương ứng kết thúc 25 Sửa lỗi tiếp tục Trong số trường hợp, người lập trình muốn sửa lỗi tiếp tục chương trình Thí dụ, người dùng vào chữ phần số Kênh vào chuyển sang trạng thái failt Cần thêm số mã để giữ dấu nhắc người dùng vào tới liệu vào hợp lệ 26 Log tiếp tục chương trình Thí dụ, chương trình thiết kế để điều khiển phản ứng hạt nhân theo dõi vệ tinh Không thể kết thúc có ngoại lệ xảy Khi ngoại lệ xảy Chương trình nên viết ngoại lệ tiếp tục chạy 27 Xem xét stack ngoại lệ Khi ngoại lệ ném hàm, hàm sau: Không Xử làm lý phần ngoại lệ ném tiếp Ném ngoại lệ 28 Xem xét stack ngoại lệ Trong trường hợp stack ngoại lệ hàm gọi cởi Ngoại lệ bắt khối try/catch Khi stack hàm gọi cởi Hàm ngoại lệ không bắt ném tiếp kết thúc Bộ nhớ cho biến địa phương bị phá hủy 29 Xem xét stack ngoại lệ Stack cởi tới Có khối try/catch quản lý ngoại lệ Chương trình không quản lý ngoại lệ Nếu chương trình không quản lý ngoại lệ, hàm terminate gọi để kết thúc chương trình 30 Tổng kết Exception: kiện không mong muốn phát sinh thực chương trình Hàm assert kiểm tra xem biểu thức có giá trị xác định không? Nếu không kết thúc chương trình Khối try/catch quản lý ngoại lệ Các lệnh khối try phát ngoại lệ Khối catch xác định dạng ngoại lệ bắt chứa mã giải 31 Tổng kết Nếu không xảy ngoại lệ nào, tất khối catch cho khối try lờ đi, lệnh tiếp tục thực sau khối catch sau Dạng liệu tham số khối catch xác định dạng ngoại lệ khối catch bắt Khối catch có nhiều tham số Lớp exception lớp sở cho lớp ngoại lệ khác Dữ liệu thành phần tên what trả chuỗi chứa đối tượng ngoại lệ ném lớp ngoại lệ built-in 32 Tổng kết Lớp exception nằm file header exception Lớp runtime_error giữ lỗi thời gian chạy C++ cho phép người lập trình tạo lớp ngoại lệ họ Hàm xác định ngoại lệ ném khai báo cảu sử dụng từ khóa throw Nếu chương trình không bắt ngoại lệ hàm terminate kết thúc chương trình 33 [...]... c dạng x c định Tất c c c dạng ngoại lệ Khối catch với … ở tham số c thể bắt tất c c c dạng ngoại lệ Theo thứ tự c a c c khối catch, nếu khối catch với … c n thiết thì Nó nên là khối catch sau c ng 14 Khối try/catch trong chương trình: 15 Sử dụng c c lớp ngoại lệ trong C+ + C+ + hỗ trợ vi c quản lý ngoại lệ thông qua c y phân c p c c lớp Hàm trả ra chuỗi chứa đối tượng ngoại lệ đư c. .. khối catch cho khối try đó đư c lờ đi, lệnh tiếp t c th c hiện sau khối catch sau c ng Dạng dữ liệu c a tham số khối catch x c định dạng ngoại lệ khối catch đó bắt Khối catch chỉ c thể c nhiều nhất 1 tham số Lớp exception là lớp c sở cho c c lớp ngoại lệ kh c Dữ liệu thành phần tên what trả ra chuỗi chứa bởi đối tượng ngoại lệ ném ra bởi c c lớp ngoại lệ built-in 32 Tổng kết Lớp exception. .. lệ chuẩn c a C+ + Lớp exception là: Lớp c sở cho c c lớp ngoại lệ c a C+ + Chứa trong head file exception 16 Sử dụng lớp ngoại lệ trong C+ + Hai lớp dẫn xuất từ exception: logic_error runtime_error logic_error và runtime_error đư c x c định trong header file stdexcept Lớp invalid_argument giải quyết trường hợp c c đối số không hợp lệ trong lời gọi hàm 17 Sử dụng c c lớp ngoại lệ trong C+ +... lệ c thể đư c bắt ở khối try/catch tiếp theo Khi stack hàm gọi đư c cởi ra Hàm ở đó ngoại lệ không đư c bắt ho c đư c ném tiếp sẽ kết th c Bộ nhớ cho biến địa phương bị phá hủy 29 Xem xét stack ngoại lệ Stack đư c cởi ra tới khi C khối try/catch quản lý ngoại lệ Chương trình không quản lý ngoại lệ Nếu chương trình không quản lý ngoại lệ, hàm terminate đư c gọi để kết th c chương trình. .. 23 C c kỹ thuật quản lý ngoại lệ Khi ngoại lệ xảy ra người lập trình thường c 3 lựa chọn: Kết th c chương trình Thêm Ghi mã để kh c ph c ngoại lệ log rồi tiếp t c 24 Kết th c chương trình Trong một số trường hợp, lựa chọn tốt nhất là kết th c chương trình khi ngoại lệ xảy ra Thí dụ, nếu input file không tồn tại khi chương trình th c hiện Không thể tiếp t c th c hiện chương trình Chương... Exception: sự kiện không mong muốn c thể đư c phát sinh trong khi th c hiện chương trình Hàm assert kiểm tra xem biểu th c có giá trị x c định không? Nếu không sẽ kết th c chương trình Khối try/catch quản lý ngoại lệ C c lệnh trong khối try c thể phát ra ngoại lệ Khối catch x c định dạng ngoại lệ nó c thể bắt và chứa mã giải quyết 31 Tổng kết Nếu không xảy ra ngoại lệ nào, tất c c c. .. Người lập trình c thể tạo lớp ngoại lệ mới C+ + sử dụng c ng một c chế cho c c ngoại lệ người dùng x c định và ngoại lệ c sẵn Phải ném ra c c ngoại lệ người dùng x c định qua lệnh throw Mọi lớp đều c thể là lớp ngoại lệ 20 Ném ra và ném tiếp ngoại lệ Khi ngoại lệ xảy ra trong khối try Điều khiển ngay lập t c đư c chuyển tới khối catch Trong khối catch Quản lý ngoại lệ ho c xử lý c thể... try/catch làm vi c, ngoại lệ phải đư c ném ra từ khối try C pháp chung để ném ra ngoại lệ là: throw expression; ở đây biểu th c là giá trị hằng, biến ho c đối tượng 11 Ném ra ngoại lệ Đối tượng đư c ném ra c thể là Đối tượng x c định Đối tượng n c danh Trong C+ + Ngoại lệ là giá trị Throw là từ khóa 12 Ném ra ngoại lệ: 13 Thứ tự c a c c khối catch Khối catch c thể bắt Tất c c c ngoại... Chương trình c thể đưa ra thông báo lỗi tương ứng và kết th c 25 Sửa lỗi và tiếp t c Trong một số trường hợp, người lập trình muốn sửa lỗi và tiếp t c chương trình Thí dụ, nếu người dùng vào chữ c i trong phần số Kênh vào sẽ chuyển sang trạng thái failt C n thêm một số mã để giữ dấu nh c người dùng vào tới khi dữ liệu vào hợp lệ 26 Log và tiếp t c chương trình Thí dụ, nếu chương trình đư c thiết... nhân ho c theo dõi vệ tinh Không thể kết th c nếu c ngoại lệ xảy ra Khi ngoại lệ xảy ra Chương trình nên viết ngoại lệ ra và tiếp t c chạy 27 Xem xét stack ngoại lệ Khi ngoại lệ đư c ném ra trong hàm, hàm c thể như sau: Không Xử làm gì lý một phần ngoại lệ rồi ném tiếp ra ngoài Ném ra ngoại lệ mới 28 Xem xét stack ngoại lệ Trong c c trường hợp này stack ngoại lệ c a hàm gọi đư c cởi ra ... Exception: kiện không mong muốn xảy th c chương trình Nếu ngoại lệ xảy th c Người lập trình cung c p mã để kết th c chương trình Chương trình kết th c với thông báo lỗi thích hợp C thể... lỗi C chế C+ + để quản lý lỗi Sử dụng khối try/catch Ngoại lệ phải ném từ khối try bị bắt khối catch C+ + cung c p hỗ trợ vi c quản lý ngoại lệ thông qua phân c p lớp Khối try/catch C c. .. Khối catch bắt tất dạng ngoại lệ C pháp chung khối try/catch Khối try/catch Nếu ngoại lệ ném từ khối try Tất khối catch cho khối try bị lờ Vi c th c tiếp t c với lệnh sau khối catch sau