Usar Classes de Exceção Padrão (std::exception)
Nesta etapa, você aprenderá sobre as classes de exceção padrão em C++ e como usar a hierarquia std::exception para lidar com diferentes tipos de erros em tempo de execução. A Biblioteca Padrão C++ fornece um conjunto de classes de exceção predefinidas que cobrem vários cenários de erro.
Abra o WebIDE e crie um novo arquivo chamado standard_exceptions.cpp no diretório ~/project:
touch ~/project/standard_exceptions.cpp
Adicione o seguinte código a 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;
}
Vamos explorar as classes de exceção padrão:
-
std::exception:
- Classe base para todas as exceções padrão
- Fornece um método virtual
what() para obter a descrição do erro
-
Classes de exceção derivadas comuns:
std::runtime_error: Para erros em tempo de execução que só podem ser detectados durante a execução do programa
std::out_of_range: Quando um índice ou iterador está fora do intervalo válido
- Outras classes comuns incluem
std::logic_error, std::invalid_argument, etc.
Compile e execute o programa:
g++ standard_exceptions.cpp -o standard_exceptions
./standard_exceptions
Exemplo de saída:
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!
Pontos-chave sobre as classes de exceção padrão:
- Fornecem uma maneira estruturada de lidar com diferentes tipos de erros
- Cada classe de exceção serve a um propósito específico
- O método
what() retorna uma mensagem de erro descritiva
- Ajuda a criar um tratamento de erros mais robusto e informativo