Manipulação de Exceções C++:Try, Catch, Throw Exemplo
O que é manipulação de exceção em C++?
O tratamento de exceções em C++ fornece uma maneira de lidar com circunstâncias inesperadas, como erros de tempo de execução. Assim, sempre que ocorre uma circunstância inesperada, o controle do programa é transferido para funções especiais conhecidas como manipuladores.
Para capturar as exceções, você coloca alguma seção do código sob inspeção de exceção. A seção de código é colocada dentro do bloco try-catch.
Se ocorrer uma situação excepcional nessa seção de código, uma exceção será lançada. Em seguida, o manipulador de exceção assumirá o controle do programa.
Caso não ocorra nenhuma circunstância excepcional, o código será executado normalmente. Os manipuladores serão ignorados.
Neste tutorial de C++, você aprenderá:
- O que é manipulação de exceção em C++?
- Por que lidar com exceções?
- Palavras-chave de tratamento de exceção
- Sintaxe:
- Exceções do padrão C++
- Exceções definidas pelo usuário
Por que lidar com exceções?
Aqui estão os motivos para usar o Tratamento de Exceções em C++:
- Você separará seu código de tratamento de erros do seu código normal. O código será mais legível e mais fácil de manter.
- As funções podem lidar com as exceções que escolherem. Mesmo que uma função lance muitas exceções, ela tratará apenas algumas. O chamador tratará as exceções não capturadas.
Palavras-chave de tratamento de exceção
O tratamento de exceções em C++ gira em torno dessas três palavras-chave:
- lançar – quando um programa encontra um problema, ele lança uma exceção. A palavra-chave throw ajuda o programa a executar o throw.
- pegar – um programa usa um manipulador de exceção para capturar uma exceção. Ele é adicionado à seção de um programa onde você precisa lidar com o problema. Isso é feito usando a palavra-chave catch.
- tente – o bloco try identifica o bloco de código para o qual certas exceções serão ativadas. Deve ser seguido por um/mais blocos catch.
Suponha que um bloco de código gere uma exceção. A exceção será capturada por um método usando as palavras-chave try e catch. O bloco try/catch deve envolver o código que pode lançar uma exceção. Esse código é conhecido como código protegido.
Sintaxe:
O try/catch usa esta sintaxe:
try { // the protected code } catch( Exception_Name exception1 ) { // catch block } catch( Exception_Name exception2 ) { // catch block } catch( Exception_Name exceptionN ) { // catch block }
- Embora tenhamos uma instrução try, podemos ter muitas instruções catch.
- O ExceptionName é o nome da exceção a ser capturada.
- A exceção1, exceção2 e exceçãoN são seus nomes definidos para se referir às exceções.
Exemplo 1:
#include<iostream> #include<vector> using namespace std; int main() { vector<int> vec; vec.push_back(0); vec.push_back(1); // access the third element, which doesn't exist try { vec.at(2); } catch (exception& ex) { cout << "Exception occurred!" << endl; } return 0; }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream no programa para usar suas funções.
- Inclua o arquivo de cabeçalho vetorial no programa para usar suas funções.
- Inclua o namespace std no programa em suas classes sem chamá-lo.
- Chame a função main(). A lógica do programa deve ser adicionada ao seu corpo.
- Crie um vetor chamado vec para armazenar dados inteiros.
- Adicione o elemento 0 ao vetor chamado vec.
- Adicione o elemento 1 ao vetor chamado vec.
- Um comentário. Ele será ignorado pelo compilador C++.
- Use a instrução try para capturar uma exceção. O { marca o início do corpo do bloco try/catch. O código adicionado no corpo se tornará o código protegido.
- Tente acessar o elemento armazenado no índice 2 (terceiro elemento) do vetor chamado vec. Este elemento não existe.
- Fim do corpo do bloco try/catch.
- Pegue a exceção. A mensagem de erro retornada será armazenada na variável ex.
- Imprima alguma mensagem no console se a exceção for detectada.
- Fim do corpo do bloco catch.
- O programa deve retornar um valor após a execução bem-sucedida.
- Fim do corpo da função main().
Exemplo 2:
#include <iostream> using namespace std; double zeroDivision(int x, int y) { if (y == 0) { throw "Division by Zero!"; } return (x / y); } int main() { int a = 11; int b = 0; double c = 0; try { c = zeroDivision(a, b); cout << c << endl; } catch (const char* message) { cerr << message << endl; } return 0; }
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
- Inclua o arquivo de cabeçalho iostream no programa para usar suas funções.
- Inclua o namespace std no programa em suas classes sem chamá-lo.
- Crie uma função chamada zeroDivision que receba dois argumentos inteiros, x e y. A função deve retornar um resultado duplo.
- Use uma instrução if para verificar se o valor do argumento da variável y é 0. O { marca o início do corpo if.
- A mensagem a ser retornada/lançada se y for 0.
- Fim do corpo da instrução if.
- A função zeroDivision deve retornar o valor de x/y.
- Fim do corpo da função zeroDivision.
- Chame o método main(). O { marca o início deste método.
- Declare uma variável inteira e atribua a ela o valor 11.
- Declare uma variável inteira b e atribua a ela o valor 0.
- Declare uma variável double c e atribua a ela o valor 0.
- Use a instrução try para capturar uma exceção. O { marca o início do corpo do bloco try/catch. O código adicionado no corpo se tornará o código protegido.
- Chame a função zeroDivision e passe para os argumentos a e b, ou seja, 11 e 0. O resultado desta operação será armazenado na variável c.
- Imprima o valor da variável c no console.
- Fim do corpo do bloco try/catch.
- Pegue a exceção. A mensagem de erro retornada será armazenada na variável message.
- Imprima a mensagem de erro retornada no console.
- Fim do corpo do bloco catch.
- O programa deve retornar um valor após a execução bem-sucedida.
- Fim do corpo da função main().
Exceções do padrão C++
C++ vem com uma lista de exceções padrão definidas na classe
Exceção Descrição std::exceptionEsta é uma exceção e a classe pai de todas as exceções C++ padrão.std::bad_allocEsta exceção é lançada por uma nova palavra-chave.std::bad_castEsta é uma exceção lançada por dynamic_cast.std::bad_exceptionUm dispositivo útil para lidar com exceções inesperadas em programas C++.std::bad_typeidUma exceção lançada por typeid.std::logic_errorEsta exceção é teoricamente detectável lendo code.std::domain_errorEsta é uma exceção lançada após usar um domínio matematicamente inválido.std::invalid_argumentUma exceção lançada por usar argumentos inválidos .std::length_errorUma exceção lançada após criar um grande std::string.std::out_of_rangeThrown by at method.std::runtime_errorEsta é uma exceção que não pode ser detectada através da leitura do code.std::overflow_errorEsta exceção é lançada após a ocorrência de um overflow matemático.std::range_errorEsta exceção é lançada quando você tenta armazenar um valor fora do intervalo.std::underflow_errorUma exceção lançada após a ocorrência de m underflow atemático. Exceções definidas pelo usuário
A classe C++ std::exception nos permite definir objetos que podem ser lançados como exceções. Esta classe foi definida no cabeçalho
Esta função retorna uma sequência de caracteres terminada em nulo do tipo char *. Podemos sobrescrevê-lo em classes derivadas para ter uma descrição de exceção.
Exemplo:
#include <iostream>
#include <exception>
using namespace std;
class newException : public exception
{
virtual const char* what() const throw()
{
return "newException occurred";
}
} newex;
int main() {
try {
throw newex;
}
catch (exception& ex) {
cout << ex.what() << '\n';
}
return 0;
}
Saída:
Aqui está uma captura de tela do código:
Explicação do código:
Resumo:
Linguagem C
- Comentários C++
- Manipulação de Exceções do Python Usando a instrução try, except e finally
- Manipulação de Exceções Java
- Java tentar... pegar
- Instrução C++ Switch Case com EXEMPLO
- Alocação dinâmica de matrizes em C++ com exemplo
- Estrutura C++ com exemplo
- std::list em C++ com exemplo
- Diferença entre estrutura e classe:explicada com exemplo de C++
- 15 Melhor IDE C++:Editor gratuito do Windows | Compilador | 2021