Objetivos
        
    
    
    
        
Exception
    
    
        
            
                Uma exceção ou exception, é um evento ou acontecimento não desejado que pode ocorrer durante 
                a execução de nossos programas, como erros de acesso a memória, falhas ao abrir um arquivo 
                e outros. Quando uma exception ocorre, um objeto contendo suas informações é "lançado" para 
                seu tratamento.
            
            Exemplos de exceções
            
exception: exceção base de todas as exceções.
invalid_argument: argumento inválido.
out_of_range: acesso indevido a local de memória.
         
     
    
    
        
            
                Para lançarmos uma exeption, de forma explícita, durante a a execução de nossos métodos, 
                utilizamos o comando throw.
            
            
                A linguagem C++ nos permite lançar exceções a partir de valores contidos em tipos básicos 
                de de dados:
            
            Sintaxe 1: throw com valor 
            
throw valor_numerico;
throw string;
            Sintaxe 2: throw com objeto 
            
throw new Exception("minha mensagem de erro");
            Exemplo 1
            
#include <iostream>
using namespace std;
int main()
{
    try
    {
       throw "Ocorreu um erro";
    }
    catch(const char *e)
    {
        cout << "Erro fatal:" << endl;
        cout << e << endl;
    }
    //outros blocos catch aqui
    return 0;
}
            Saída
            
Erro fatal:
Ocorreu um erro
            Exemplo 2
            #include <iostream>
using namespace std;
int main()
{
    try
    {
       throw new Exception();
    }
    catch(const char *e){
        cout << "Erro fatal"
        cout << e << endl;
    }
    return 0;
}
            Saída
            
Erros
         
     
    
        Recuperando mensagem de erro
        
     
    
        
            
                Para recuperarmos a mensagem de erro contida em uma exception, utilizamos o métodos 
                what que é herdado da classe Exception.
            
            Sintaxe
            
public string what();
            Exemplo 2
            
#include <iostream>
#include  //exceções padrão
using namespace std;
 
int main()
{
    try {
        throw invalid_argument("invalid_argument");
    }
    catch (const invalid_argument &a) {
        cout << "Erro:" << a.what() << endl;
    }
    return 0;
}
            Saída
            
invalid_argument
         
     
    
    
        
            
                O comando throw é utilizado tanto para lançar uma exceção quanto para relançar. Para 
                relançar uma exceção, basta utilizar apenas o comando throw dentro de 
                um bloco catch, como visto abaixo:
            
            Sintaxe
            
catch(const tipo_excecao &variavel) 
{
    throw; //relançando exceção
}
            Exemplo 4
            
#include <iostream>
#include <stdexcept>
using namespace std;
void funcao(int arg)
{
    try
    {
        throw invalid_argument("Erro invalid_argument");        
    }
    catch(const invalid_argument &e)
    {
        throw; //relançando erro
    }
}
int main()
{
    try 
    {
        funcao(1);
    }
    catch(const invalid_argument &ia)
    {
        cout << ia.what();
    }
    catch (...) //qualquer outro erro
    { 
        cout << "Ocorreu um erro";
    }
    return 0;
}
            Saída
            
Erro invalid_argumento
         
     
    
        Tipos de exceptions nativas
        
     
    
        
            
                Abaixo, uma lista de algumas exceções nativas mais comuns disponíveis na linguagem C++. 
            
            
                Tab. 1: Exceções nativas
                
                    
                        | Nome | 
                        Descrição | 
                    
                
                
                    
                        | exception | 
                        Exceção base de todas as exceções | 
                    
                    
                        | bad_allow | 
                        lançada ao usar new | 
                    
                    
                        | bad_cast | 
                        Lançada ao usar dynamic_cast | 
                    
                    
                        | bad_exception | 
                        Exceção genérica | 
                    
                    
                        | domain_error | 
                        Lançada por cálculos matemáticos | 
                    
                    
                        | invalid_argument | 
                        Lançada ao existir argumentos em formatos inválidos | 
                    
                    
                        | length_error | 
                        Lançada quando algum recurso atinge o limite máximo | 
                    
                    
                        | out_of_range | 
                        Lançada quando há uma tentativa de leitura de um local de memória além do permitido | 
                    
                    
                        | overflow_error | 
                        Lançada quando ocorre um erro matemática de transbordamento | 
                    
                    
                        | range_error | 
                        Lançada quando há uma tentativa de escrita a local de memória além do permitido | 
                    
                
            
            
                Em futuras atualizações, as exceptions acima serão estudadas com exemplos para melhor compreensão de seus usos.
            
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 31/07/2025 - revisão 4 - Correções: pontuais, sintaxes; Alteração: 'Exceção genérica' movida. Adição: Ex. 1
 
                - 27/09/2024 - revisão 2 - Correção em intro 'Exception'; ajustes pontuais
 
                - 12/02/2024 - revisão 1 - correção em navegação, css e erros gramaticais
 
                - 30/06/2023 - versão inicial
 
            
         
     
    
            
            
                
                    
                    Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
                em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.