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, throwen catch:

Met de tryinstructie kunt u een codeblok definiëren dat moet worden getest op fouten terwijl het wordt uitgevoerd.

Het throwsleutelwoord genereert een uitzondering wanneer een probleem wordt gedetecteerd, waardoor we een aangepaste fout kunnen maken.

Met de catchinstructie kunt u een codeblok definiëren dat moet worden uitgevoerd als er een fout optreedt in het try-blok.

De tryen catchtrefwoorden 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 tryblok om wat code te testen: als de agevariabele kleiner is dan 18, zullen we een uitzondering maken en deze in ons blok throwverwerken .catch

In het catchblok vangen we de fout op en doen er iets aan. De catch instructie heeft een parameter : in ons voorbeeld gebruiken we een intvariabele ( myNum) (omdat we een uitzondering van inthet type in het tryblok ( age) gooien), om de waarde van uit te voeren age.

Als er geen fout optreedt (bijv. if ageis 20in plaats van 15, wat betekent dat het groter is dan 18), wordt het catchblok overgeslagen:

Voorbeeld

int age = 20;

U kunt het throwtrefwoord 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 catchblok 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";
}