Criando uma classe concreta e sem herança, podemos utilizá-la como exceção com o comando throw
e também no bloco catch.
Sintaxe A
class minha_excecao
{
//corpo omitido
}
Onde
-
Exemplo 1
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
class minha_excecao { //sem mensagem de erro customizada
};
int main()
{
try
{
throw minha_excecao(); //lançando exceção
}
catch(minha_excecao me){
cout << "Ocorreu um erro" << endl;
}
return 0;
}
Saída
Ocorreu um erro
A adição de métodos, atributos e construtores em nossas exceções customizadas é feita da mesma forma vista
em C++: POO.
Exemplo 2
using namespace std;
class minha_excecao {
private:
string msg;
int id;
public:
string mensagem()
{
//omitido
}
};
Após a declaração dos atributos e métodos necessários, declaramos um método construtor que irá auxiliar
a iniciar um objeto do tipo de nossa exceção.
Exemplo 3
class minha_excecao {
//atributos e métodos omitidos
minha_excecao(string _msg, int _id){
this->msg = _msg;
this->id = _id;
}
};
Abaixo, o exemplo final contendo os trechos de código acima mostrados:
Exemplo 4
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
class minha_excecao {
private:
string msg;
int id;
public:
string mensagem(){
return to_string(id) + "\n" + msg ;
}
minha_excecao(string _msg, int _id){
this->msg = _msg;
this->id = _id;
}
};
int main()
{
try
{
throw minha_excecao("meu erro customizado",777);
}
catch(minha_excecao me)
{
cout << me.mensagem() << endl;
}
return 0;
}
Saída
777
meu erro customizado