Eccezioni C++
Eccezioni C++
Quando si esegue codice C++, possono verificarsi diversi errori: errori di codifica commessi dal programmatore, errori dovuti a input errati o altre cose imprevedibili.
Quando si verifica un errore, C++ normalmente si interrompe e genera un messaggio di errore. Il termine tecnico per questo è: C++ genererà un'eccezione (genera un errore).
C++ prova a catturare
La gestione delle eccezioni in C++ è costituita da tre parole chiave: try
, throw
e catch
:
L' try
istruzione consente di definire un blocco di codice da testare per verificare la presenza di errori durante l'esecuzione.
La throw
parola chiave genera un'eccezione quando viene rilevato un problema, che ci consente di creare un errore personalizzato.
L' catch
istruzione consente di definire un blocco di codice da eseguire, se si verifica un errore nel blocco try.
Le parole chiave try
e catch
sono in coppia:
Esempio
try {
// Block of code to try
throw exception;
// Throw an exception when a problem arise
}
catch () {
// Block of code to handle errors
}
Considera il seguente esempio:
Esempio
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;
}
Esempio spiegato
Usiamo il try
blocco per testare del codice: se la age
variabile è minore di 18
, faremo throw
un'eccezione e la gestiamo nel nostro catch
blocco.
Nel catch
blocco, catturiamo l'errore e facciamo qualcosa al riguardo. L' catch
istruzione accetta un parametro : nel nostro esempio utilizziamo una int
variabile ( myNum
) (perché stiamo lanciando un'eccezione di int
tipo nel try
blocco ( age
)), per produrre il valore di age
.
Se non si verifica alcun errore (ad esempio se age
è 20
invece di 15
, il che significa che sarà maggiore di 18), il catch
blocco viene saltato:
Esempio
int age = 20;
Puoi anche utilizzare la throw
parola chiave per generare un numero di riferimento, ad esempio un numero/codice di errore personalizzato per scopi organizzativi:
Esempio
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;
}
Gestisci qualsiasi tipo di eccezione (...)
Se non conosci il throw
tipo utilizzato nel try
blocco, puoi utilizzare la sintassi dei "tre punti" ( ...
) all'interno del catch
blocco, che gestirà qualsiasi tipo di eccezione:
Esempio
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";
}