Ngoại lệ C++
Ngoại lệ C++
Khi thực thi mã C++, các lỗi khác nhau có thể xảy ra: lỗi mã hóa do người lập trình thực hiện, lỗi do nhập sai hoặc các lỗi không lường trước được khác.
Khi xảy ra lỗi, C++ thường sẽ dừng và tạo ra thông báo lỗi. Thuật ngữ kỹ thuật cho việc này là: C++ sẽ đưa ra một ngoại lệ (ném ra lỗi).
C++ thử và bắt
Xử lý ngoại lệ trong C++ bao gồm ba từ khóa: try
, throw
và catch
:
Câu lệnh try
cho phép bạn xác định một khối mã để kiểm tra lỗi trong khi nó đang được thực thi.
Từ khóa throw
ném ra một ngoại lệ khi phát hiện sự cố, điều này cho phép chúng tôi tạo lỗi tùy chỉnh.
Câu lệnh catch
cho phép bạn xác định khối mã sẽ được thực thi nếu xảy ra lỗi trong khối thử.
Các từ khóa try
và catch
đi theo cặp:
Ví dụ
try {
// Block of code to try
throw exception ;
// Throw an exception when a problem arise
}
catch () {
// Block of code to handle errors
}
Hãy xem xét ví dụ sau:
Ví dụ
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw (age);
}
}
catch (int
myNum) {
cout << "Access denied - You must be at least 18 years
old.\n";
cout << "Age is: " << myNum;
}
Hãy tự mình thử »Ví dụ giải thích
Chúng tôi sử dụng khối try
để kiểm tra một số mã: Nếu biến age
nhỏ hơn 18
, chúng tôi sẽ throw
một ngoại lệ và xử lý nó trong khối catch
của chúng tôi.
Trong khối catch
, chúng tôi phát hiện lỗi và xử lý lỗi đó. Câu lệnh catch
nhận một tham số : trong ví dụ của chúng ta, chúng ta sử dụng một biến int
( myNum
) (vì chúng ta đang ném một ngoại lệ của kiểu int
vào khối try
( age
)), để xuất ra giá trị của age
.
Nếu không có lỗi xảy ra (ví dụ: nếu age
là 20
thay vì 15
, nghĩa là nó sẽ lớn hơn 18), khối catch
sẽ bị bỏ qua:
Bạn cũng có thể sử dụng từ khóa throw
để xuất số tham chiếu, như số/mã lỗi tùy chỉnh cho mục đích sắp xếp:
Ví dụ
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Error number: " << myNum;
}
Hãy tự mình thử »Xử lý mọi loại ngoại lệ (...)
Nếu bạn không biết kiểu throw
được sử dụng trong khối try
, bạn có thể sử dụng cú pháp "ba dấu chấm" ( ...
) bên trong khối catch
, khối này sẽ xử lý mọi loại ngoại lệ:
Ví dụ
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (...) {
cout << "Access denied - You must be at least 18 years
old.\n";
}
Hãy tự mình thử »