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

Tài liệu lập trình C tiếng Việt lesson 7 Exception

33 448 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 33
Dung lượng 464 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ngoại lệ Exception: sự kiện không mong muốn xảy ra trong khi thực hiện chương trình  Nếu ngoại lệ xảy ra trong khi thực hiện  Người lập trình cung cấp mã để kết thúc chương trình hoặ

Trang 1

Lập trình hướng đối tượng

Bài 7: Ngoại lệ (Exception)

Trang 3

Ngoại lệ

 Exception: sự kiện không mong muốn xảy ra

trong khi thực hiện chương trình

 Nếu ngoại lệ xảy ra trong khi thực hiện

 Người lập trình cung cấp mã để kết thúc chương

trình hoặc

 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

Trang 4

Quản lý ngoại lệ trong chương trình

 Hàm assert:

Kiểm tra nếu biểu thức thỏa điều kiện nào đó

Nếu điều kiện không được thỏa, nó kết thúc chương trình

 Thí dụ: chia cho 0

Nếu số chia là 0, assert kết thúc chương trình với thông báo lỗi

Trang 5

Cơ chế của C++ để quản lý lỗi

 Sử dụng khối try/catch

 Ngoại lệ phải được ném ra từ trong khối try

và sẽ bị bắt trong khối catch

 C++ cung cấp sự hỗ trợ việc quản lý ngoại lệ thông qua cây phân cấp các lớp

Trang 6

Khối try/catch

 Các lệnh có thể phát sinh ngoại lệ được đặt

trong khối try

 Khối try cũng chứa các lệnh mà sẽ không được thực hiện nếu ngoại lệ xảy ra

 Mỗi khối try có thể có 1 hoặc nhiều khối catch

Trang 7

Khối try/catch

 Khối catch:

 Xác định dạng ngoại lệ mà nó bắt

 Chứa lệnh xử lý ngoại lệ

 Nếu khối catch chứa trong phần tham số

 Khối catch có thể bắt tất cả các dạng ngoại lệ

Trang 8

 Cú pháp chung của khối try/catch

Trang 9

Khối try/catch

 Nếu không có ngoại lệ được ném ra từ khối try

 Tất cả các khối catch cho khối try đó bị lờ đi

 Việc thực hiện sẽ tiếp tục với lệnh sau khối catch sau cùng

 Nếu ngoại lệ được ném ra từ khối try

Trang 10

Khối try/catch

 Chương trình chuyển tới các 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 ra phù hợp với dạng

tham số trong một khối catch nào đó:

 Mã của khối catch đó được thực hiện

 Các khối catch còn lại không được thực hiện

Trang 13

Ném ra ngoại lệ:

Trang 14

Thứ tự của các khối catch

Trang 15

Khối try/catch trong chương trình:

Trang 16

 Lớp cơ sở cho các lớp ngoại lệ của C++

 Chứa trong head file exception

Trang 18

Sử dụng các lớp ngoại lệ trong C++

 Lớp out_of_range giải quyết với chuỗi ngoài giới hạn (subscript out_of_range)

 Lớp length_error giữ các lỗi nếu

 Chiều dài lớn hơn độ dài lớn nhất cho phép

Trang 19

 Nếu toán tử new không thể cung cấp bộ nhớ

Trang 20

Lớp ngoại lệ người dùng

 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ệ

Trang 21

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ể ngoại lệ và sau

đó ném tiếp ngoại lệ, hoặc

 Ném ngoại lệ khác cho môi trường

Trang 22

 Cú pháp chung để ném tiếp ngoại lệ là:

Trang 23

 Đối tượng được ném ra có thể là

 Đối tượng cụ thể

 Đối tượng nặc danh

 Hàm xác định các ngoại lệ nó ném ra trong khai báo sử dụng mệnh đề throw

Ném ra và ném tiếp ngoại lệ

Trang 24

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ó

Trang 25

 Không thể tiếp tục thực hiện chương trình

 Chương trình có thể đưa ra thông báo lỗi tương ứng và kết thúc

Trang 26

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ệ

Trang 27

Log và tiếp tục chương trình

 Thí dụ, nếu chương trình được thiết kế để điều khiển phản ứng hạ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

Trang 28

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 làm gì

 Xử 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

Trang 29

 Trong các trường hợp này stack ngoại lệ của

hàm gọi được cởi ra

 Ngoại 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

Xem xét stack ngoại lệ

Trang 30

 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

Xem xét stack ngoại lệ

Trang 31

 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

Trang 32

Tổng kết

 Nếu không xảy ra ngoại lệ nào, tất cả cá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

Trang 33

Tổng kết

 Lớp exception nằm trong 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ệ của họ

 Hàm xác định các ngoại lệ nó ném ra ở khai báo cảu nó

sử dụng từ khóa throw

Nếu chương trình không bắt ngoại lệ thì hàm terminate

kết thúc chương trình

Ngày đăng: 28/03/2016, 01:05

TỪ KHÓA LIÊN QUAN