C++ Exception Handling:Try, Catch, Throw Voorbeeld
Wat is het afhandelen van uitzonderingen in C++?
Afhandeling van uitzonderingen in C++ biedt u een manier om onverwachte omstandigheden zoals runtime-fouten af te handelen. Dus wanneer zich een onverwachte omstandigheid voordoet, wordt de programmabesturing overgedragen aan speciale functies die bekend staan als handlers.
Om de uitzonderingen op te vangen, plaatst u een deel van de code onder uitzonderingsinspectie. Het codegedeelte wordt in het try-catch-blok geplaatst.
Als zich een uitzonderlijke situatie voordoet binnen dat gedeelte van de code, wordt er een uitzondering gegenereerd. Vervolgens neemt de exception-handler de controle over het programma over.
Als zich geen uitzonderlijke omstandigheid voordoet, wordt de code normaal uitgevoerd. De begeleiders worden genegeerd.
In deze C++ tutorial leer je:
- Wat is het afhandelen van uitzonderingen in C++?
- Waarom afhandeling van uitzonderingen?
- Trefwoorden omgaan met uitzonderingen
- Syntaxis:
- C++ standaard uitzonderingen
- Door de gebruiker gedefinieerde uitzonderingen
Waarom afhandeling van uitzonderingen?
Dit zijn de redenen voor het gebruik van Exception Handling in C++:
- U scheidt uw foutafhandelingscode van uw normale code. De code wordt beter leesbaar en gemakkelijker te onderhouden.
- Functies kunnen de door hen gekozen uitzonderingen aan. Zelfs als een functie veel uitzonderingen genereert, zal deze er slechts enkele afhandelen. De beller zal de niet-afgevangen uitzonderingen afhandelen.
Trefwoorden omgaan met uitzonderingen
Het afhandelen van uitzonderingen in C++ draait om deze drie sleutelwoorden:
- gooien - wanneer een programma een probleem tegenkomt, genereert het een uitzondering. Het worp trefwoord helpt het programma de worp uit te voeren.
- vangen – een programma gebruikt een exception-handler om een exception op te vangen. Het wordt toegevoegd aan het gedeelte van een programma waar u het probleem moet oplossen. Het is gedaan met behulp van het catch-sleutelwoord.
- probeer – het try-blok identificeert het codeblok waarvoor bepaalde uitzonderingen worden geactiveerd. Het moet worden gevolgd door een/meer vangstblokken.
Stel dat een codeblok een uitzondering genereert. De uitzondering wordt opgevangen door een methode die try-and-cat-trefwoorden gebruikt. Het try/catch-blok moet de code omringen die een uitzondering kan veroorzaken. Een dergelijke code staat bekend als beveiligde code.
Syntaxis:
De try/catch heeft deze syntaxis:
try { // the protected code } catch( Exception_Name exception1 ) { // catch block } catch( Exception_Name exception2 ) { // catch block } catch( Exception_Name exceptionN ) { // catch block }
- Hoewel we één try-statement hebben, kunnen we veel catch-statements hebben.
- De ExceptionName is de naam van de uitzondering die moet worden opgevangen.
- De exception1, exception2 en exceptionN zijn uw gedefinieerde namen om naar de uitzonderingen te verwijzen.
Voorbeeld 1:
#include<iostream> #include<vector> using namespace std; int main() { vector<int> vec; vec.push_back(0); vec.push_back(1); // access the third element, which doesn't exist try { vec.at(2); } catch (exception& ex) { cout << "Exception occurred!" << endl; } return 0; }
Uitvoer:
Hier is een screenshot van de code:
Code uitleg:
- Voeg het iostream-headerbestand toe aan het programma om de functies ervan te gebruiken.
- Voeg het vectorheaderbestand toe aan het programma om de functies ervan te gebruiken.
- Voeg de std-naamruimte toe aan de klassen van het programma zonder deze aan te roepen.
- Roep de functie main() aan. De programmalogica moet in de body worden toegevoegd.
- Maak een vector met de naam vec om integer-gegevens op te slaan.
- Voeg het element 0 toe aan de vector met de naam vec.
- Voeg het element 1 toe aan de vector met de naam vec.
- Een opmerking. Het wordt overgeslagen door de C++-compiler.
- Gebruik de try-instructie om een uitzondering op te vangen. De { markeert het begin van de body van het try/catch-blok. De code die in de body wordt toegevoegd, wordt de beschermde code.
- Probeer toegang te krijgen tot het element dat is opgeslagen op index 2 (derde element) van de vector met de naam vec. Dit element bestaat niet.
- Einde van de body van het try/catch-blok.
- Vang de uitzondering. De geretourneerde foutmelding wordt opgeslagen in de variabele ex.
- Druk een bericht af op de console als de uitzondering wordt opgevangen.
- Einde van het lichaam van het vangblok.
- Het programma zou een waarde moeten retourneren na succesvolle uitvoering.
- Einde van de hoofdtekst van de functie ().
Voorbeeld 2:
#include <iostream> using namespace std; double zeroDivision(int x, int y) { if (y == 0) { throw "Division by Zero!"; } return (x / y); } int main() { int a = 11; int b = 0; double c = 0; try { c = zeroDivision(a, b); cout << c << endl; } catch (const char* message) { cerr << message << endl; } return 0; }
Uitvoer:
Hier is een screenshot van de code:
Code uitleg:
- Voeg het iostream-headerbestand toe aan het programma om de functies ervan te gebruiken.
- Voeg de std-naamruimte toe aan de klassen van het programma zonder deze aan te roepen.
- Maak een functie met de naam zeroDivision waaraan twee integer-argumenten x en y moeten doorgegeven worden. De functie zou een dubbel resultaat moeten retourneren.
- Gebruik een if-statement om te controleren of de waarde van het variabele argument y 0 is. De { markeert het begin van if body.
- Het bericht dat moet worden geretourneerd/gegooid als y 0 is.
- Einde van de hoofdtekst van het if-statement.
- De functie zeroDivision moet de waarde x/y teruggeven.
- Einde van de hoofdtekst van de functie zeroDivision.
- Roep de methode main() aan. De { markeert het begin van deze methode.
- Declareer een integer-variabele en ken deze de waarde 11 toe.
- Declareer een integer-variabele b en ken deze de waarde 0 toe.
- Declareer een dubbele variabele c en ken deze de waarde 0 toe.
- Gebruik de try-instructie om een uitzondering op te vangen. De { markeert het begin van de body van het try/catch-blok. De code die in de body wordt toegevoegd, wordt de beschermde code.
- Roep de functie zeroDivision aan en geef deze door aan argumenten a en b, dat wil zeggen 11 en 0. Het resultaat van deze bewerking wordt opgeslagen in variabele c.
- Druk de waarde van variabele c af op de console.
- Einde van de body van het try/catch-blok.
- Vang de uitzondering. Het geretourneerde foutbericht wordt opgeslagen in het variabele bericht.
- Druk het geretourneerde foutbericht af op de console.
- Einde van het lichaam van het vangblok.
- Het programma zou een waarde moeten retourneren na succesvolle uitvoering.
- Einde van de hoofdtekst van de functie ().
C++ standaard uitzonderingen
C++ wordt geleverd met een lijst met standaarduitzonderingen die zijn gedefinieerd in de klasse
Door de gebruiker gedefinieerde uitzonderingen
Met de klasse C++ std::exception kunnen we objecten definiëren die als uitzonderingen kunnen worden gegenereerd. Deze klasse is gedefinieerd in de
Deze functie retourneert een op null eindigende tekenreeks van het type char *. We kunnen het overschrijven in afgeleide klassen om een uitzonderingsbeschrijving te hebben.
Voorbeeld:
#include <iostream> #include <exception> using namespace std; class newException : public exception { virtual const char* what() const throw() { return "newException occurred"; } } newex; int main() { try { throw newex; } catch (exception& ex) { cout << ex.what() << '\n'; } return 0; }
Uitvoer:
Hier is een screenshot van de code:
Code uitleg:
- Neem het iostream-headerbestand op in ons programma. We zullen de functies ervan gebruiken zonder fouten te krijgen.
- Neem het exception header-bestand op in ons programma. We zullen de functies gebruiken zoals wat zonder fouten.
- Neem de std-naamruimte op in ons programma om de klassen te gebruiken zonder deze aan te roepen.
- Maak een nieuwe klasse met de naam newException. Deze klasse erft de uitzonderingsklasse van C++.
- Het begin van de klas.
- Overschrijf de virtuele lidfunctie wat() gedefinieerd in het uitzonderingsheaderbestand. We zullen dan onze eigen uitzondering, de nieuwe uitzondering, beschrijven.
- Start de definitie van de nieuwe uitzondering.
- Het bericht dat moet worden geretourneerd als de nieuwe uitzondering wordt opgevangen.
- Einde van de definitie van de nieuwe uitzondering.
- Einde van de hoofdtekst van de klasse newException. De newex is de naam die moet worden gebruikt om onze nieuwe uitzondering op te vangen, waarna de newException wordt aangeroepen.
- Roep de functie main() aan. De programmalogica moet in de body worden toegevoegd. De { markeert het begin van zijn lichaam.
- Gebruik een try-statement om de code te markeren waarin we de uitzondering moeten markeren. De { markeert het begin van de body van het try/catch-blok. De code eromheen wordt beveiligd.
- Gooi de newex-uitzondering als deze wordt gepakt.
- Einde van de try-body.
- Gebruik het catch-statement om de uitzondering op te vangen. Het uitzonderingsfoutbericht wordt opgeslagen in variabele ex.
- Druk het uitzonderingsfoutbericht af op de console.
- Einde van de body of catch-statement.
- Het programma zou een waarde moeten retourneren als het succesvol wordt uitgevoerd.
- Einde van de hoofdtekst van de functie main().
Samenvatting:
- Met uitzonderingsafhandeling in C++ kunt u runtime-fouten afhandelen.
- Runtime-fouten zijn de fouten die optreden tijdens de uitvoering van het programma.
- Het afhandelen van uitzonderingen helpt u bij het omgaan met onverwachte omstandigheden in uw programma.
- Wanneer de onverwachte omstandigheid zich voordoet, wordt de programmacontrole overgedragen aan de handlers.
- Om een uitzondering op te vangen, plaats je een stuk code onder het try-catch-blok.
- Het throw-sleutelwoord helpt het programma om uitzonderingen te genereren, waardoor het programma het probleem kan oplossen.
- Het try-sleutelwoord helpt bij het identificeren van het codeblok waarvoor bepaalde uitzonderingen worden geactiveerd.
- We kunnen de what()-functie van het exception header-bestand overschrijven om onze exceptions te definiëren.
C Taal
- C++ Opmerkingen
- Afhandeling van Python-uitzonderingen met behulp van de instructie try, behalve en tenslotte
- Afhandeling van Java-uitzonderingen
- Java proberen ... vangen
- Operators in C++ met voorbeeld:wat is, typen en programma's
- C++ Switch Case Statement met VOORBEELD
- C++ Dynamische toewijzing van arrays met voorbeeld
- C++-structuur met voorbeeld
- std::lijst in C++ met Voorbeeld
- Verschil tussen structuur en klasse:uitgelegd met C++-voorbeeld
- 15 Beste C ++ IDE:gratis Windows-editor | Compiler | 2021