Exception handling

Chia sẻ: Danh Ngoc | Ngày: | Loại File: PDF | Số trang:6

0
82
lượt xem
13
download

Exception handling

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Exception handling Exception handling là một tính năng mới được giới thiệu bởi chuẩn ANSIC++. Nếu bạn sử dụng một trình biên dịch C++ không tương thích với chuẩn ANSI C++ thì bạn không thể sử dụng tính năng này. Trong suốt quá trình phát triển một chương trình, có thể có một số trường hợp mà một số đoạn mã chạy sai do truy xuất đến những tài nguyên không tồn tại hay vượt ra ngoài khoảng mong muốn... Những loại tình huống bất thường này được nằm trong cái được gọi là exceptions và C++ đã vừa tích hợp...

Chủ đề:
Lưu

Nội dung Text: Exception handling

  1. Exception handling Exception handling là một tính năng mới được giới thiệu bởi chuẩn ANSI- C++. Nếu bạn sử dụng một trình biên dịch C++ không tương thích với chuẩn ANSI C++ thì bạn không thể sử dụng tính năng này. Trong suốt quá trình phát triển một chương trình, có thể có một số trường hợp mà một số đoạn mã chạy sai do truy xuất đến những tài nguyên không tồn tại hay vượt ra ngoài khoảng mong muốn... Những loại tình huống bất thường này được nằm trong cái được gọi là exceptions và C++ đã vừa tích hợp ba toán tử mới để xử lý những tình huống này: try, throw và catch. Dạng thức sử dụng như sau: try { // đoạn mã cần thử throw exception; } catch (type exception) { // đoạn được thực hiện trong trường hợp có lỗi } Nguyên tắc hoạt động: - Đoạn mã nằm trong khối try được thực hiện một cách bình thường. Trong trường hợp có lỗi xảy ra, đoạn mã này phải sử dụng từ khoá throw và một tham số để báo lỗi. Kiểu tham số này mô tả chi tiết hoá lỗi và có thể là bất kì kiểu hợp lệ nào. - Nếu có lỗi xảy ra, nếu lệnh throw đã được thực hiện bên trong khối try, khối catch sẽ được thực hiện và nhận tham số được truyền bởi throw. Ví dụ: // exceptions Exception: Out of range #include int main () {
  2. char myarray[10]; try { for (int n=0; n9) throw "Out of range"; myarray[n]='z'; } } catch (char * str) { cout
  3. try { char * mystring; mystring = new char [10]; if (mystring == NULL) throw "Allocation failure"; for (int n=0; n9) throw n; mystring[n]='z'; } } catch (int i) { cout
  4. try { // code here } catch (...) { cout
  5. bad_alloc (gửi bởi new) bad_cast (gửi bởi dynamic_cast khi thất bại với một kiểu tham chiếu) bad_exception (được gửi khi một exception không phù hợp với lệnh catch nào) bad_typeid (gửi bởi typeid) logic_error domain_error invalid_argum ent length_error out_of_range runtime_error overflow_erro r range_error underflow_err or ios_base::failu (gửi bởi ios::clear) re Bởi vì đây là một hệ thống phân lớp có thứ bậc, nếu bạn sử dụng một khối catch để chặn bất kì một exception nào nằm trong hệ thông này bằng cách sử dụng tham số biến (thêm một dấu & vào phía trước tên của tham số) bạn sẽ chặn được tất cả các exception thừa kế (luật thừa kế trong C++) Ví dụ dưới đây chặn một exception có kiểu bad_typeid (được thừa kế từ exception), lỗi này được tạo ra khi muốn biết kiểu của một con trỏ null. // Những exception chuẩn Exception: Attempted typeid of NULL pointer #include #include #include class A {virtual f() {}; }; int main () { try { A * a = NULL; typeid (*a); }
  6. catch (std::exception& e) { cout
Đồng bộ tài khoản