C++ Uitzonderingen
C++ Uitzonderingen
Bij het uitvoeren van C++-code kunnen verschillende fouten optreden: codeerfouten gemaakt door de programmeur, fouten door verkeerde invoer of andere onvoorziene dingen.
Wanneer er een fout optreedt, zal C++ normaal gesproken stoppen en een foutmelding genereren. De technische term hiervoor is: C++ zal een uitzondering genereren (een fout veroorzaken).
C++ proberen en vangen
Afhandeling van uitzonderingen in C++ bestaat uit drie trefwoorden: try
, throw
en catch
:
Met de try
instructie kunt u een codeblok definiëren dat moet worden getest op fouten terwijl het wordt uitgevoerd.
Het throw
sleutelwoord genereert een uitzondering wanneer een probleem wordt gedetecteerd, waardoor we een aangepaste fout kunnen maken.
Met de catch
instructie kunt u een codeblok definiëren dat moet worden uitgevoerd als er een fout optreedt in het try-blok.
De try
en catch
trefwoorden komen in paren:
Voorbeeld
try {
// Block of code to try
throw exception;
// Throw an exception when a problem arise
}
catch () {
// Block of code to handle errors
}
Beschouw het volgende voorbeeld:
Voorbeeld
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;
}
Voorbeeld uitgelegd
We gebruiken het try
blok om wat code te testen: als de age
variabele kleiner is dan 18
, zullen we een uitzondering maken en deze in ons blok throw
verwerken .catch
In het catch
blok vangen we de fout op en doen er iets aan. De catch
instructie heeft een parameter : in ons voorbeeld gebruiken we een int
variabele ( myNum
) (omdat we een uitzondering van int
het type in het try
blok ( age
) gooien), om de waarde van uit te voeren age
.
Als er geen fout optreedt (bijv. if age
is 20
in plaats van 15
, wat betekent dat het groter is dan 18), wordt het catch
blok overgeslagen:
Voorbeeld
int age = 20;
U kunt het throw
trefwoord ook gebruiken om een referentienummer uit te voeren, zoals een aangepast foutnummer/-code voor organisatiedoeleinden:
Voorbeeld
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;
}
Omgaan met elk type uitzondering (...)
throw
Als u het type dat in het blok wordt gebruikt niet weet try
, kunt u de syntaxis "drie stippen" ( ...
) in het catch
blok gebruiken, die elk type uitzondering afhandelt:
Voorbeeld
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";
}