Использование стандартных классов исключений (std::exception)
На этом этапе вы узнаете о стандартных классах исключений в C++ и о том, как использовать иерархию std::exception для обработки различных типов ошибок времени выполнения. Стандартная библиотека C++ предоставляет набор предопределенных классов исключений, которые охватывают различные сценарии ошибок.
Откройте WebIDE и создайте новый файл с именем standard_exceptions.cpp в директории ~/project:
touch ~/project/standard_exceptions.cpp
Добавьте следующий код в файл standard_exceptions.cpp:
#include <iostream>
#include <stdexcept>
#include <limits>
double divideNumbers(double numerator, double denominator) {
// Check for division by zero using std::runtime_error
if (denominator == 0) {
throw std::runtime_error("Division by zero is not allowed!");
}
return numerator / denominator;
}
void checkArrayIndex(int* arr, int size, int index) {
// Check for out-of-range access using std::out_of_range
if (index < 0 || index >= size) {
throw std::out_of_range("Array index is out of bounds!");
}
std::cout << "Value at index " << index << ": " << arr[index] << std::endl;
}
int main() {
try {
// Demonstrate division by zero exception
std::cout << "Attempting division:" << std::endl;
double result = divideNumbers(10, 0);
}
catch (const std::runtime_error& e) {
std::cout << "Runtime Error: " << e.what() << std::endl;
}
try {
// Demonstrate array index out of range exception
int numbers[] = {1, 2, 3, 4, 5};
int arraySize = 5;
std::cout << "\nAccessing array elements:" << std::endl;
checkArrayIndex(numbers, arraySize, 2); // Valid index
checkArrayIndex(numbers, arraySize, 10); // Invalid index
}
catch (const std::out_of_range& e) {
std::cout << "Out of Range Error: " << e.what() << std::endl;
}
return 0;
}
Рассмотрим стандартные классы исключений:
-
std::exception:
- Базовый класс для всех стандартных исключений
- Предоставляет виртуальный метод
what(), чтобы получить описание ошибки
-
Общие производные классы исключений:
std::runtime_error: Для ошибок времени выполнения, которые могут быть обнаружены только во время выполнения программы
std::out_of_range: Когда индекс или итератор находятся вне допустимого диапазона
- Другие общие классы включают
std::logic_error, std::invalid_argument и т.д.
Скомпилируйте и запустите программу:
g++ standard_exceptions.cpp -o standard_exceptions
./standard_exceptions
Пример вывода:
Attempting division:
Runtime Error: Division by zero is not allowed!
Accessing array elements:
Value at index 2: 3
Out of Range Error: Array index is out of bounds!
Основные моменты о стандартных классах исключений:
- Предоставляют структурированный способ обработки различных типов ошибок
- Каждый класс исключений служит определенной цели
- Метод
what() возвращает описательное сообщение об ошибке
- Помогает создавать более надежную и информативную обработку ошибок