### Cách xử lý ngoại lệ (Exception Handling) trong C++
Trong C++, xử lý ngoại lệ được thực hiện thông qua ba từ khóa chính: `try`, `catch`, và `throw`.
- **`try`**: Khối mã mà bạn muốn kiểm tra để phát hiện ngoại lệ.
- **`throw`**: Được sử dụng để ném ra một ngoại lệ khi phát hiện lỗi.
- **`catch`**: Khối mã để xử lý ngoại lệ khi nó xảy ra.
### Quy trình xử lý ngoại lệ
1. **Đặt mã có khả năng gây lỗi trong khối `try`.**
2. **Ném ngoại lệ bằng từ khóa `throw` khi phát hiện lỗi.**
3. **Sử dụng khối `catch` để bắt và xử lý ngoại lệ.**
### Ví dụ chương trình chia hai số và xử lý lỗi chia cho 0
```cpp
#include
using namespace std;
double divide(int a, int b) {
if (b == 0) {
throw runtime_error("Lỗi: Không thể chia cho 0!"); // Ném ngoại lệ
}
return static_cast(a) / b; // Trả về kết quả chia
}
int main() {
int num1, num2;
cout << "Nhập số thứ nhất: ";</p>
cin >> num1;
cout << "Nhập số thứ hai: ";</p>
cin >> num2;
try {
double result = divide(num1, num2); // Gọi hàm chia trong khối try
cout << "Kết quả: " << result << endl;</p>
} catch (const runtime_error& e) { // Bắt ngoại lệ
cout << e.what() << endl; // In thông báo lỗi</p>
}
return 0;
}
```
### Giải thích chương trình:
1. **Hàm `divide(int a, int b)`**:
- Kiểm tra nếu `b` bằng 0, ném một ngoại lệ với thông báo lỗi sử dụng `throw`.
- Nếu không có lỗi, trả về kết quả của phép chia.
2. **Trong hàm `main()`**:
- Nhập hai số từ người dùng.
- Gọi hàm `divide()` trong khối `try`.
- Nếu có ngoại lệ xảy ra, nó sẽ được bắt bởi khối `catch`, và thông báo lỗi sẽ được in ra cho người dùng.
### Cách hoạt động của chương trình:
- Khi người dùng nhập số thứ nhất và số thứ hai, chương trình sẽ cố gắng thực hiện phép chia.
- Nếu người dùng nhập số 0 cho số thứ hai, hàm `divide()` sẽ ném ra một ngoại lệ `runtime_error`.
- Khối `catch` sẽ bắt ngoại lệ đó và in thông báo lỗi "Lỗi: Không thể chia cho 0!" ra màn hình.