Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
C++ permite que você lançar exceções de qualquer tipo, embora em geral, é recomendável throw tipos derivados de std::exception.Uma exceção de C++ pode ser detectada por um catch manipulador que especifica o mesmo tipo, como a exceção gerada ou por um manipulador que pode capturar qualquer tipo de exceção.
Se o tipo de exceção gerada é uma classe, que também tem uma classe base (ou classes), ela pode ser capturado pelos manipuladores que aceitam classes base do tipo da exceção, bem como pela referências às bases do tipo da exceção.Observe que, quando uma exceção é detectada por uma referência, está vinculado ao objeto real exceção gerada; Caso contrário, ele é uma cópia (muito semelhante a um argumento para uma função).
Quando uma exceção é lançada, podem ser detectado pelos seguintes tipos de catch manipuladores:
Um manipulador que pode aceitar qualquer tipo (usando a sintaxe de reticências).
Um manipulador que aceita o mesmo tipo que o objeto de exceção; porque é uma cópia, const e volatile modificadores são ignorados.
Um manipulador que aceita uma referência para o mesmo tipo que o objeto de exceção.
Um manipulador que aceita uma referência a um const ou volatile o formulário do mesmo tipo que o objeto de exceção.
Um manipulador que aceita uma classe base do mesmo tipo que o objeto de exceção; uma vez que é uma cópia, const e volatile modificadores são ignorados.O catch manipulador para uma classe base não deve preceder o catch manipulador para a classe derivada.
Um manipulador que aceita uma referência a uma classe base do mesmo tipo que o objeto de exceção.
Um manipulador que aceita uma referência a um const ou volatile o formulário de uma classe base do mesmo tipo que o objeto de exceção.
Um manipulador que aceita um ponteiro para o qual um objeto de ponteiro gerada pode ser convertido por meio de regras de conversão do ponteiro padrão.
A ordem na qual catch manipuladores são exibidos é significativa, porque manipuladores para um determinado tente bloco são examinadas em ordem de sua aparência.Por exemplo, ele é um erro para colocar o manipulador para uma classe base antes do manipulador para uma classe derivada.Depois de uma correspondência catch manipulador é encontrado, manipuladores subseqüentes não são examinados.Como resultado, uma elipse catch o manipulador deve ser o último manipulador para seu tente bloco.Por exemplo:
// ...
try
{
// ...
}
catch( ... )
{
// Handle exception here.
}
// Error: the next two handlers are never examined.
catch( const char * str )
{
cout << "Caught exception: " << str << endl;
}
catch( CExcptClass E )
{
// Handle CExcptClass exception here.
}
Neste exemplo, as reticências catch manipulador é o único manipulador é examinado.