Exceções C++
Exceções C++
Ao executar o código C++, diferentes erros podem ocorrer: erros de codificação feitos pelo programador, erros devido a entrada errada ou outros imprevistos.
Quando ocorre um erro, o C++ normalmente para e gera uma mensagem de erro. O termo técnico para isso é: C++ lançará uma exceção (lançará um erro).
C++ tente e pegue
O tratamento de exceções em C++ consiste em três palavras-chave: try
, throw
e catch
:
A try
instrução permite que você defina um bloco de código para ser testado quanto a erros enquanto está sendo executado.
A throw
palavra-chave lança uma exceção quando um problema é detectado, o que nos permite criar um erro personalizado.
A catch
instrução permite definir um bloco de código a ser executado, caso ocorra um erro no bloco try.
As palavras-chave try
e catch
vêm em pares:
Exemplo
try {
// Block of code to try
throw exception;
// Throw an exception when a problem arise
}
catch () {
// Block of code to handle errors
}
Considere o seguinte exemplo:
Exemplo
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw (age);
}
}
catch (int
myNum) {
cout << "Access denied - You must be at least 18 years
old.\n";
cout << "Age is: " << myNum;
}
Exemplo explicado
Usamos o try
bloco para testar algum código: Se a age
variável for menor que 18
, faremos throw
uma exceção e trataremos em nosso catch
bloco.
No catch
bloco, pegamos o erro e fazemos algo a respeito. A catch
instrução recebe um parâmetro : em nosso exemplo, usamos uma int
variável ( myNum
) (porque estamos lançando uma exceção de int
tipo no try
bloco ( age
)), para gerar o valor de age
.
Se nenhum erro ocorrer (por exemplo, if age
is 20
em vez de 15
, significando que será maior que 18), o catch
bloco será ignorado:
Exemplo
int age = 20;
Você também pode usar a throw
palavra-chave para gerar um número de referência, como um número/código de erro personalizado para fins de organização:
Exemplo
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Error number: " << myNum;
}
Lidar com qualquer tipo de exceção (...)
Caso você não saiba o throw
tipo usado no try
bloco, você pode usar a sintaxe dos "três pontos" ( ...
) dentro do catch
bloco, que tratará qualquer tipo de exceção:
Exemplo
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (...) {
cout << "Access denied - You must be at least 18 years
old.\n";
}