Trong chđ ươ chế xử lý lỗi exception handling do người sửng trình có th ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi đưa ra quy t ế xử lý lỗi exception handling do người sử định
Trang 1Ph l c 2 ụ lục 2 ụ lục 2
X lý l i ử lý lỗi ỗi
B t đ u t phiên b n 3.0, C++ cung c p c ch x lý l i (exception handling) do ngấp cơ chế xử lý lỗi (exception handling) do người sử ơ chế xử lý lỗi (exception handling) do người sử ế xử lý lỗi (exception handling) do người sử ử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử ười sử ử lý lỗi (exception handling) do người sửi s
d ng i u h nh Trong chđ ươ chế xử lý lỗi (exception handling) do người sửng trình có th ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi đưa ra quy t ế xử lý lỗi (exception handling) do người sử định rằng một phép xử lý nào đó bị lỗinh r ng m t phép x lý n o ó b l iằng một phép xử lý nào đó bị lỗi ột phép xử lý nào đó bị lỗi ử lý lỗi (exception handling) do người sử đ ịnh rằng một phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử
b ng cách s d ng t khoá ằng một phép xử lý nào đó bị lỗi ử lý lỗi (exception handling) do người sử throw Khi có l i, vi c x lý b ng t v quy n i u khi n s trao trỗi (exception handling) do người sử ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ử lý lỗi (exception handling) do người sử ịnh rằng một phép xử lý nào đó bị lỗi đ ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ẽ trao trả cho o n x lý l i m ngđ ạn xử lý lỗi mà người sử dụng bắt được ử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử ười sử ử lý lỗi (exception handling) do người sửi s d ng b t được.c
1 B y v b t l i ẫy và bắt lỗi à bắt lỗi ắt lỗi ỗi
Ta l y ví d vi t m t h m tính giá tr c a m t phân s v i ấp cơ chế xử lý lỗi (exception handling) do người sử ế xử lý lỗi (exception handling) do người sử ột phép xử lý nào đó bị lỗi ịnh rằng một phép xử lý nào đó bị lỗi ủa một phân số với đầu vào là tử số và mẫu số ột phép xử lý nào đó bị lỗi ố với đầu vào là tử số và mẫu số ới đầu vào là tử số và mẫu số đ u v o l t s v m u s ử lý lỗi (exception handling) do người sử ố với đầu vào là tử số và mẫu số ẫu số ố với đầu vào là tử số và mẫu số
R c r i s n y sinh khi ngố với đầu vào là tử số và mẫu số ẽ trao trả ười sử ử lý lỗi (exception handling) do người sửi s d ng h m truy n v o cho m u s giá tr b ng 0 ẫu số ố với đầu vào là tử số và mẫu số ịnh rằng một phép xử lý nào đó bị lỗi ằng một phép xử lý nào đó bị lỗi Để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi gi i quy tế xử lý lỗi (exception handling) do người sử
trười sửng h p n y, C++ s t ợc ẽ trao trả đột phép xử lý nào đó bị lỗing t o sinh b y l i “g p trạn xử lý lỗi mà người sử dụng bắt được ẫu số ỗi (exception handling) do người sử ặp trường hợp mẫu số bằng 0” Sau đây là ười sửng h p m u s b ng 0” Sau ây lợc ẫu số ố với đầu vào là tử số và mẫu số ằng một phép xử lý nào đó bị lỗi đ
chươ chế xử lý lỗi (exception handling) do người sửng trình ví d cho h m tính giá tr phân s có x lý l i ịnh rằng một phép xử lý nào đó bị lỗi ố với đầu vào là tử số và mẫu số ử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử
#include <iostream.h>
// l p ki u l i m không có th nh ph n n o ớp kiểu lỗi mà không có thành phần nào ểu lỗi mà không có thành phần nào ỗi mà không có thành phần nào à không có thành phần nào à không có thành phần nào ần nào à không có thành phần nào
class Loi_Chia_0 {};
float GiaTriPS(int ts, int ms){
// phát l i n u m u = 0 ỗi mà không có thành phần nào ếu mẫu = 0 ẫu = 0
if ( ms==0 ) throw( Loi_Chia_0 );
return float(ts)/ms;
}
void main(){
int ts, ms;
cout << “Tinh gia tri phan so\n”;
cout << “TS = “; cin >> ts;
cout << “MS = “; cin >> ms;
try { // th c hi n có b t l i ực hiện có bắt lỗi ện có bắt lỗi ắt lỗi ỗi mà không có thành phần nào
float gt = GiaTriPS(ts, ms);
cout << “Gia tri PS la: “ << gt;
}
catch ( Loi_Chia_0 ) // b t l i ki u Loi_Chia_0 ắt lỗi ỗi mà không có thành phần nào ểu lỗi mà không có thành phần nào
{
cout << “Loi: Mau so bang 0”;
}
}
Tinh gia tri phan so
TS = 1
MS = 0
Loi: Mau so bang 0
Trang 2Chươ chế xử lý lỗi (exception handling) do người sửng trình n y có hai ph n b y l i v b t l i H m tính phân s s phát sinh m t b y l iẫu số ỗi (exception handling) do người sử ỗi (exception handling) do người sử ố với đầu vào là tử số và mẫu số ẽ trao trả ột phép xử lý nào đó bị lỗi ẫu số ỗi (exception handling) do người sử
b ng t khoá ằng một phép xử lý nào đó bị lỗi throw khi m u s b ng 0 Phía sau t khoá throw l ẫu số ố với đầu vào là tử số và mẫu số ằng một phép xử lý nào đó bị lỗi đố với đầu vào là tử số và mẫu số ược.i t ng thu c l p ph c vột phép xử lý nào đó bị lỗi ới đầu vào là tử số và mẫu số
b t l i ây ta s d ng l p ỗi (exception handling) do người sử ở đây ta sử dụng lớp đ ử lý lỗi (exception handling) do người sử ới đầu vào là tử số và mẫu số Loi_Chia_0 không có th nh ph n n o bên trong để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ph c v cho vi cệc xử lý bị ngắt và quyền điều khiển sẽ trao trả
b t l i n y Khi m t l i ỗi (exception handling) do người sử ột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử được.c phát sinh, to n b nh ng l nh ti p theo trong h m x lý b hu b ột phép xử lý nào đó bị lỗi ững lệnh tiếp theo trong hàm xử lý bị huỷ bỏ ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ế xử lý lỗi (exception handling) do người sử ử lý lỗi (exception handling) do người sử ịnh rằng một phép xử lý nào đó bị lỗi ỷ bỏ ỏ Trong thân chươ chế xử lý lỗi (exception handling) do người sửng trình chính chúng ta s d ng c u trúc ử lý lỗi (exception handling) do người sử ấp cơ chế xử lý lỗi (exception handling) do người sử try catch để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi b t l i H mỗi (exception handling) do người sử GiaTriPS được đặp trường hợp mẫu số bằng 0” Sau đây làc t trong try, do v y khi nó phát sinh l i (l i lo i Loi_Chia_0 ậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh ỗi (exception handling) do người sử ỗi (exception handling) do người sử ạn xử lý lỗi mà người sử dụng bắt được được.c phát sinh khi m u s truy n v o l 0) thì chẫu số ố với đầu vào là tử số và mẫu số ươ chế xử lý lỗi (exception handling) do người sửng trình d ng ho t ạn xử lý lỗi mà người sử dụng bắt được đột phép xử lý nào đó bị lỗing v trao quy n i u khi n chođ ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi
o n mã b t l i n y Ta ã dùng
đ ạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử đ catch ( Loi_Chia_0 ) để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi b t l i Nh v y, khi có m t l i chia 0ỗi (exception handling) do người sử ư ậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh ột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử thì chươ chế xử lý lỗi (exception handling) do người sửng trình s in ra dòng thông báo “Loi: Mau so bang 0” Khi trong chẽ trao trả ươ chế xử lý lỗi (exception handling) do người sửng trình có m t l iột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử phát sinh m không có o n b t l i tđ ạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử ươ chế xử lý lỗi (exception handling) do người sửng ng thì chứng thì chương trình sẽ tự động kết thúc bất thường ươ chế xử lý lỗi (exception handling) do người sửng trình s t ẽ trao trả đột phép xử lý nào đó bị lỗing k t thúc b t thế xử lý lỗi (exception handling) do người sử ấp cơ chế xử lý lỗi (exception handling) do người sử ười sửng
i u n y s gây tr ng i áng k cho vi c g r i ch ng trình
Đ ẽ trao trả ở đây ta sử dụng lớp ạn xử lý lỗi mà người sử dụng bắt được đ ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ỡ rối chương trình ố với đầu vào là tử số và mẫu số ươ chế xử lý lỗi (exception handling) do người sử
M t chột phép xử lý nào đó bị lỗi ươ chế xử lý lỗi (exception handling) do người sửng trình có th phát sinh nhi u lo i l i khác nhau Lo i l i phát sinh th hi n ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử ạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ở đây ta sử dụng lớp
ki u l p l i ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ới đầu vào là tử số và mẫu số ỗi (exception handling) do người sử được.c s d ng trong các l nh ử lý lỗi (exception handling) do người sử ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả throw Do v y, ta c ng có th s d ng nhi u l nậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh ũng có thể sử dụng nhiều lần ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ử lý lỗi (exception handling) do người sử
catch để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi b t các lo i l i khác nhau trong m t chạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử ột phép xử lý nào đó bị lỗi ươ chế xử lý lỗi (exception handling) do người sửng trình nh trong ví d sau.ư
#include <iostream.h>
class Loi_A {};
class Loi_B {};
void PhatLoi(int i){
// neu i khac 0 thi phat Loi_A con khong Loi_B
if (i) throw ( Loi_A );
throw ( Loi_B );
}
void main(){
int i;
cout << “i = “; cin >> i;
try
{
PhatLoi( i );
}
catch ( Loi_A )
{
cout << “Loi loai A”;
}
catch ( Loi_B )
{
cout << “Loi loai B”;
}
}
i = 1
Loi loai A
i = 0
Trang 3Loi loai B
Ta c ng có th s d ng ũng có thể sử dụng nhiều lần ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ử lý lỗi (exception handling) do người sử catch( ) để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi b t t t c các lo i l i L p l i có th có cácấp cơ chế xử lý lỗi (exception handling) do người sử ạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử ới đầu vào là tử số và mẫu số ỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi
th nh ph n gi ng nh l p bình thố với đầu vào là tử số và mẫu số ư ới đầu vào là tử số và mẫu số ười sửng dùng để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi l m các thông s x lý l i khi b t ố với đầu vào là tử số và mẫu số ử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử được.c Ch ngẳng
h n, trong chạn xử lý lỗi mà người sử dụng bắt được ươ chế xử lý lỗi (exception handling) do người sửng trình x lý l i chia 0 trên ta có th thêm v o thu c tính ử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử ở đây ta sử dụng lớp ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ột phép xử lý nào đó bị lỗi để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ư ạn xử lý lỗi mà người sử dụng bắt được ử lý lỗi (exception handling) do người sử ố với đầu vào là tử số và mẫu số ủa một phân số với đầu vào là tử số và mẫu số l u l i t s c a phép chia l i dùng in ra khi b t l i.ỗi (exception handling) do người sử ỗi (exception handling) do người sử
#include <iostream.h>
class Loi_Chia_0{
public:
int ts;
Loi_Chia_0(int t): ts(t) {}
};
float GiaTriPS(int ts, int ms){
if ( ms==0 ) throw( Loi_Chia_0(ts) );
return float(ts)/ms;
}
void main(){
int ts, ms;
cout << “Tinh gia tri phan so\n”;
cout << “TS = “; cin >> ts;
cout << “MS = “; cin >> ms;
try {
float gt = GiaTriPS(ts, ms);
cout << “Gia tri PS la: “ << gt;
}
catch ( Loi_Chia_0 loi )
{
cout << “Loi chia “ << loi.ts << “ cho 0”;
}
}
Tinh gia tri phan so
TS = 1
MS = 0
Loi chia 1 cho 0
2 Ho t đ ng c a ch ạt động của chương trình khi một lỗi phát sinh ộng của chương trình khi một lỗi phát sinh ủa chương trình khi một lỗi phát sinh ương trình khi một lỗi phát sinh ng trình khi m t l i phát sinh ộng của chương trình khi một lỗi phát sinh ỗi
Khi m t l i trong chột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử ươ chế xử lý lỗi (exception handling) do người sửng trình ã b b t thì chđ ịnh rằng một phép xử lý nào đó bị lỗi ươ chế xử lý lỗi (exception handling) do người sửng trình ti p t c ho t ế xử lý lỗi (exception handling) do người sử ạn xử lý lỗi mà người sử dụng bắt được đột phép xử lý nào đó bị lỗing bình thười sửng theo mã l nh x lý l i b t ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử được.c Trong m t h m x lý ngột phép xử lý nào đó bị lỗi ử lý lỗi (exception handling) do người sử ười sử ử lý lỗi (exception handling) do người sửi s d ng có th b t l i x y ra vể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử sau ó ti p t c ném nó đ ế xử lý lỗi (exception handling) do người sử để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi duy trì l i c a chỗi (exception handling) do người sử ủa một phân số với đầu vào là tử số và mẫu số ươ chế xử lý lỗi (exception handling) do người sửng trình b ng t khoá ằng một phép xử lý nào đó bị lỗi throw m không có ki uể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi
lo i l i phía sau.ạn xử lý lỗi mà người sử dụng bắt được ỗi (exception handling) do người sử
#include <iostream.h>
Trang 4class Loi {};
void PhatLoi(){
throw ( Loi );
}
void BatLoi(){
PhatLoi();
}
cout << “Loi da bi bat va duoc nem lai\n”;
throw; // ném l i l i b b t ại lỗi bị bắt ỗi mà không có thành phần nào ị bắt ắt lỗi
}
}
void main() {
try {
BatLoi();
}
catch ( Loi ) {
cout << “Loi bi bat lai lan hai”;
}
}
Loi da bi bat va duoc nem lai
Loi bi bat lai lan hai
Khi m t l i x y ra m không có m t b t l i n o áp ng thì chột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử ột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử đ ứng thì chương trình sẽ tự động kết thúc bất thường ươ chế xử lý lỗi (exception handling) do người sửng trình s k t thúc vẽ trao trả ế xử lý lỗi (exception handling) do người sử
trưới đầu vào là tử số và mẫu số.c khi k t thúc nó s th c hi n h m x lý ế xử lý lỗi (exception handling) do người sử ẽ trao trả ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ử lý lỗi (exception handling) do người sử được.c xác l p trong câu l nh ậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả set_terminate
#include <iostream.h>
class Loi {};
void KetThucLoi(){
cout << “Chuong trinh bi loi va ket thuc bat thuong\n”;
}
void PhatLoi(){
throw ( Loi );
}
void main(){
// xác l p h m k t thúc b t th ập hàm kết thúc bất thường à không có thành phần nào ếu mẫu = 0 ất thường ường ng
set_terminate(KetThucLoi);
cout << “Goi ham phat loi ma khong bat\n”;
Trang 5cout << “Ket thuc binh thuong\n”;
}
Goi ham phat loi ma khong bat
Chuong trinh bi loi va ket thuc bat thuong
Trong m t h m x lý ngột phép xử lý nào đó bị lỗi ử lý lỗi (exception handling) do người sử ười sử ử lý lỗi (exception handling) do người sửi x d ng có th xác ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi định rằng một phép xử lý nào đó bị lỗinh t t c nh ng l i có th x y ra b ngấp cơ chế xử lý lỗi (exception handling) do người sử ững lệnh tiếp theo trong hàm xử lý bị huỷ bỏ ỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ằng một phép xử lý nào đó bị lỗi
cách dùng t khoá throw đứng thì chương trình sẽ tự động kết thúc bất thường.ng ngay sau khai báo tham s h m v li t kê nh ng l p l i có thố với đầu vào là tử số và mẫu số ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ững lệnh tiếp theo trong hàm xử lý bị huỷ bỏ ới đầu vào là tử số và mẫu số ỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi
x y ra để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi trong c p d u ( ) N u không có l p l i n o ặp trường hợp mẫu số bằng 0” Sau đây là ấp cơ chế xử lý lỗi (exception handling) do người sử ế xử lý lỗi (exception handling) do người sử ới đầu vào là tử số và mẫu số ỗi (exception handling) do người sử được.c li t kê thì hi u r ng h m ó sệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ằng một phép xử lý nào đó bị lỗi đ ẽ trao trả không có l i Còn n u không có t khoá ỗi (exception handling) do người sử ế xử lý lỗi (exception handling) do người sử throw thì h m ó có th có b t kì l i n o.đ ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ấp cơ chế xử lý lỗi (exception handling) do người sử ỗi (exception handling) do người sử
// h m có th có L i_A ho c L i_B à không có thành phần nào ểu lỗi mà không có thành phần nào ỗi mà không có thành phần nào ặc Lỗi_B ỗi mà không có thành phần nào
void fct1() throw(Loi_A, Loi_B);
// h m s không có l i n o à không có thành phần nào ẽ không có lỗi nào ỗi mà không có thành phần nào à không có thành phần nào
void fct2() throw();
// h m có th có b t kì lo i l i n o à không có thành phần nào ểu lỗi mà không có thành phần nào ất thường ại lỗi bị bắt ỗi mà không có thành phần nào à không có thành phần nào
void fct3();
Trười sửng h p v i m t h m n o ó tuy ã ợc ới đầu vào là tử số và mẫu số ột phép xử lý nào đó bị lỗi đ đ được.c xác định rằng một phép xử lý nào đó bị lỗinh m t s l i có th x y ra, nh ng khiột phép xử lý nào đó bị lỗi ố với đầu vào là tử số và mẫu số ỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ư
ch y l i xu t hi n m t l i không ph i l l i ã xác ạn xử lý lỗi mà người sử dụng bắt được ạn xử lý lỗi mà người sử dụng bắt được ấp cơ chế xử lý lỗi (exception handling) do người sử ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ột phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử ỗi (exception handling) do người sử đ định rằng một phép xử lý nào đó bị lỗinh, thì chươ chế xử lý lỗi (exception handling) do người sửng trình s k t thúc Trẽ trao trả ế xử lý lỗi (exception handling) do người sử ưới đầu vào là tử số và mẫu số.c khi
k t thúc nó s th c hi n phép x lý c a h m ế xử lý lỗi (exception handling) do người sử ẽ trao trả ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ử lý lỗi (exception handling) do người sử ủa một phân số với đầu vào là tử số và mẫu số được.c xác l p b ng h m ậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh ằng một phép xử lý nào đó bị lỗi set_unexpected.
#include <iostream.h>
class Loi_A {};
class Loi_B {}
void LoiKhongCho()
{
cout << “Chuong trinh ket thuc vi gap loi khong cho\n”;
}
void PhatLoi() throw(Loi_B){
throw (Loi_A);
}
void main(){
// xác l p h m k t thúc khi g p l i không ch ập hàm kết thúc bất thường à không có thành phần nào ếu mẫu = 0 ặc Lỗi_B ỗi mà không có thành phần nào ờng đợi i
set_unexpected(LoiKhongCho);
cout << “Goi ham phat loi\n”;
PhatLoi();
}
catch ( ) {
cout << “Loi da bi bat”;
}
}
Trang 6Goi ham phat loi
Chuong trinh ket thuc vi gap loi khong cho
3 X lý l i trong l p ng d ng ử lý lỗi ỗi ớp ứng dụng ứng dụng ụng
Trong m c n y chúng ta s xây d ng m t l p ng d ng m ng ẽ trao trả ột phép xử lý nào đó bị lỗi ới đầu vào là tử số và mẫu số ứng thì chương trình sẽ tự động kết thúc bất thường đột phép xử lý nào đó bị lỗing có ki m soát l i kh iể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử ở đây ta sử dụng lớp
t o v i s ph n t nh h n ho c b ng không v l i truy nh p ph n t ngo i ch s ạn xử lý lỗi mà người sử dụng bắt được ới đầu vào là tử số và mẫu số ố với đầu vào là tử số và mẫu số ử lý lỗi (exception handling) do người sử ỏ ơ chế xử lý lỗi (exception handling) do người sử ặp trường hợp mẫu số bằng 0” Sau đây là ằng một phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử ậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh ử lý lỗi (exception handling) do người sử ỉ số ố với đầu vào là tử số và mẫu số
#include <iostream.h>
#include <stdlib.h>
class Loi{
public:
virtual void InLoi()=0;
};
// l i kh i t o ỗi mà không có thành phần nào ởi tạo ại lỗi bị bắt
class Loi_KT : public Loi {
public:
int spt;
Loi_KT(int n): spt(n) {}
void InLoi() {
cout << “Loi khoi tao voi ” << spt << “ phan tu\n”;
}
};
// loi truy cap
class Loi_TC : public Loi {
public:
int cs;
Loi_TC(int i): cs(i) {}
void InLoi() {
cout << “Loi truy cap chi so ” << cs << “\n”;
}
};
class Array
{
int spt; // so phan tu mang
int *dl; // du lieu cua mang
public:
Array(int n): spt(n) {
if ( spt <= 0 ) throw( Loi_KT(spt) );
dl = new int[spt];
}
Trang 7~Array() { delete dl; }
int & operator [] (int i){
if ( i<0 || i>=spt ) throw( Loi_TC(i) );
return dl[i];
}
};
void main(){
Array a(-3);
a[5] = 10;
}
// bat toan bo loi ke thua tu Loi
l.InLoi(); // in loi tuong ung boi
}
}
Loi khoi tao voi -3 phan tu
Trong chươ chế xử lý lỗi (exception handling) do người sửng trình trên ã dùng k thu t a hình đ ĩ thuật đa hình để tạo một lớp lỗi trừu tượng cơ sở có ậy khi nó phát sinh lỗi (lỗi loại Loi_Chia_0 được phát sinh đ để đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ạn xử lý lỗi mà người sử dụng bắt được t o m t l p l i tr u tột phép xử lý nào đó bị lỗi ới đầu vào là tử số và mẫu số ỗi (exception handling) do người sử ược.ng c s cóơ chế xử lý lỗi (exception handling) do người sử ở đây ta sử dụng lớp
phươ chế xử lý lỗi (exception handling) do người sửng th c in l i o Các l i c th k th a t l p n y v thi h nh c th vi c in l i cho nó.ứng thì chương trình sẽ tự động kết thúc bất thường ỗi (exception handling) do người sử ỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ế xử lý lỗi (exception handling) do người sử ới đầu vào là tử số và mẫu số ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ỗi (exception handling) do người sử Khi b t l i, ch c n b t l i l p c s m t cách t ng quát thì t t c các ki u l i trong l p k th aỗi (exception handling) do người sử ỉ số ỗi (exception handling) do người sử ới đầu vào là tử số và mẫu số ơ chế xử lý lỗi (exception handling) do người sử ở đây ta sử dụng lớp ột phép xử lý nào đó bị lỗi ổng quát thì tất cả các kiểu lỗi trong lớp kế thừa ấp cơ chế xử lý lỗi (exception handling) do người sử ể đưa ra quyết định rằng một phép xử lý nào đó bị lỗi ỗi (exception handling) do người sử ới đầu vào là tử số và mẫu số ế xử lý lỗi (exception handling) do người sử
u b b t Khi g i th t c in l i b b t, h th ng s in úng l i c a l p nó thu c v o t ng t
đ ịnh rằng một phép xử lý nào đó bị lỗi + ủa một phân số với đầu vào là tử số và mẫu số ỗi (exception handling) do người sử ịnh rằng một phép xử lý nào đó bị lỗi ệc xử lý bị ngắt và quyền điều khiển sẽ trao trả ố với đầu vào là tử số và mẫu số ẽ trao trả đ ỗi (exception handling) do người sử ủa một phân số với đầu vào là tử số và mẫu số ới đầu vào là tử số và mẫu số ột phép xử lý nào đó bị lỗi ươ chế xử lý lỗi (exception handling) do người sử
nh tính tư ươ chế xử lý lỗi (exception handling) do người sửng ng b i.ứng thì chương trình sẽ tự động kết thúc bất thường ột phép xử lý nào đó bị lỗi