C ++ - Ausnahmebehandlung: Try, Catch, Throw Beispiel

Inhaltsverzeichnis:

Anonim

Was ist Ausnahmebehandlung in C ++?

Die Ausnahmebehandlung in C ++ bietet Ihnen die Möglichkeit, unerwartete Umstände wie Laufzeitfehler zu behandeln. Wenn also ein unerwarteter Umstand eintritt, wird die Programmsteuerung auf spezielle Funktionen übertragen, die als Handler bezeichnet werden.

Um die Ausnahmen abzufangen, setzen Sie einen Codeabschnitt unter Ausnahmeprüfung. Der Codeabschnitt wird innerhalb des Try-Catch-Blocks platziert.

Wenn innerhalb dieses Codeabschnitts eine Ausnahmesituation auftritt, wird eine Ausnahme ausgelöst. Als nächstes übernimmt der Ausnahmebehandler die Kontrolle über das Programm.

Falls keine außergewöhnlichen Umstände auftreten, wird der Code normal ausgeführt. Die Handler werden ignoriert.

In diesem C ++ - Tutorial lernen Sie:

  • Was ist Ausnahmebehandlung in C ++?
  • Warum Ausnahmebehandlung?
  • Schlüsselwörter für die Ausnahmebehandlung
  • Syntax:
  • C ++ - Standardausnahmen
  • Benutzerdefinierte Ausnahmen

Warum Ausnahmebehandlung?

Hier sind die Gründe für die Verwendung der Ausnahmebehandlung in C ++:

  • Sie werden Ihren Fehlerbehandlungscode von Ihrem normalen Code trennen. Der Code ist lesbarer und leichter zu pflegen.
  • Funktionen können die von ihnen ausgewählten Ausnahmen behandeln. Selbst wenn eine Funktion viele Ausnahmen auslöst, werden nur einige behandelt. Der Anrufer behandelt die nicht erfassten Ausnahmen.

Schlüsselwörter für die Ausnahmebehandlung

Die Ausnahmebehandlung in C ++ dreht sich um diese drei Schlüsselwörter:

  • throw - Wenn ein Programm auf ein Problem stößt, wird eine Ausnahme ausgelöst. Das Schlüsselwort throw hilft dem Programm, den Wurf auszuführen.
  • catch - Ein Programm verwendet einen Ausnahmebehandler, um eine Ausnahme abzufangen. Es wird dem Abschnitt eines Programms hinzugefügt, in dem Sie das Problem behandeln müssen. Dies geschieht mit dem Schlüsselwort catch.
  • try - Der try-Block gibt den Codeblock an, für den bestimmte Ausnahmen aktiviert werden. Es sollten ein / mehrere Fangblöcke folgen.

Angenommen, ein Codeblock löst eine Ausnahme aus. Die Ausnahme wird von einer Methode mit try and catch-Schlüsselwörtern abgefangen. Der try / catch-Block sollte Code umgeben, der eine Ausnahme auslösen kann. Ein solcher Code wird als geschützter Code bezeichnet.

Syntax:

Der try / catch verwendet diese Syntax:

try {// the protected code} catch( Exception_Name exception1 ) {// catch block} catch( Exception_Name exception2 ) {// catch block} catch( Exception_Name exceptionN ) {// catch block}
  • Obwohl wir eine try-Anweisung haben, können wir viele catch-Anweisungen haben.
  • Der ExceptionName ist der Name der Ausnahme, die abgefangen werden soll.
  • Die Ausnahme1, Ausnahme2 und AusnahmeN sind Ihre definierten Namen für den Verweis auf die Ausnahmen.

Beispiel 1:

#include#includeusing namespace std;int main() {vector vec;vec.push_back(0);vec.push_back(1);// access the third element, which doesn't existtry{vec.at(2);}catch (exception& ex){cout << "Exception occurred!" << endl;}return 0;}

Ausgabe:

Hier ist ein Screenshot des Codes:

Code Erläuterung:

  1. Fügen Sie die iostream-Headerdatei in das Programm ein, um ihre Funktionen zu nutzen.
  2. Fügen Sie die Vektor-Header-Datei in das Programm ein, um ihre Funktionen zu verwenden.
  3. Fügen Sie den Standard-Namespace in das Programm seiner Klassen ein, ohne ihn aufzurufen.
  4. Rufen Sie die Funktion main () auf. Die Programmlogik sollte in ihrem Hauptteil hinzugefügt werden.
  5. Erstellen Sie einen Vektor mit dem Namen vec, um ganzzahlige Daten zu speichern.
  6. Fügen Sie das Element 0 zum Vektor mit dem Namen vec hinzu.
  7. Fügen Sie das Element 1 dem Vektor mit dem Namen vec hinzu.
  8. Ein Kommentar. Es wird vom C ++ - Compiler übersprungen.
  9. Verwenden Sie die try-Anweisung, um eine Ausnahme abzufangen. Das {markiert den Beginn des Körpers des Try / Catch-Blocks. Der im Text hinzugefügte Code wird zum geschützten Code.
  10. Versuchen Sie, auf das Element zuzugreifen, das im Index 2 (drittes Element) des Vektors mit dem Namen vec gespeichert ist. Dieses Element existiert nicht.
  11. Ende des Körpers des Try / Catch-Blocks.
  12. Fangen Sie die Ausnahme. Die zurückgegebene Fehlermeldung wird in der Variablen ex gespeichert.
  13. Drucken Sie eine Nachricht auf der Konsole aus, wenn die Ausnahme abgefangen wird.
  14. Ende des Körpers des Fangblocks.
  15. Das Programm sollte nach erfolgreicher Ausführung einen Wert zurückgeben.
  16. Ende des Hauptfunktionskörpers ().

Beispiel 2:

#include 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;}

Ausgabe:

Hier ist ein Screenshot des Codes:

Code Erläuterung:

  1. Fügen Sie die iostream-Headerdatei in das Programm ein, um ihre Funktionen zu nutzen.
  2. Fügen Sie den Standard-Namespace in das Programm seiner Klassen ein, ohne ihn aufzurufen.
  3. Erstellen Sie eine Funktion mit dem Namen zeroDivision, die zwei ganzzahlige Argumente x und y akzeptiert. Die Funktion sollte ein doppeltes Ergebnis zurückgeben.
  4. Verwenden Sie eine if-Anweisung, um zu überprüfen, ob der Wert des Variablenarguments y 0 ist. Das {markiert den Anfang des if-Körpers.
  5. Die Nachricht, die zurückgegeben / ausgelöst werden soll, wenn y 0 ist.
  6. Ende des Hauptteils der if-Anweisung.
  7. Die Funktion zeroDivision sollte den Wert von x / y zurückgeben.
  8. Ende des Körpers der ZeroDivision-Funktion.
  9. Rufen Sie die main () -Methode auf. Das {markiert den Beginn dieser Methode.
  10. Deklarieren Sie eine Ganzzahlvariable und weisen Sie ihr den Wert 11 zu.
  11. Deklarieren Sie eine Ganzzahlvariable b und weisen Sie ihr den Wert 0 zu.
  12. Deklarieren Sie eine Doppelvariable c und weisen Sie ihr den Wert 0 zu.
  13. Verwenden Sie die try-Anweisung, um eine Ausnahme abzufangen. Das {markiert den Beginn des Körpers des Try / Catch-Blocks. Der im Text hinzugefügte Code wird zum geschützten Code.
  14. Rufen Sie die Funktion zeroDivision auf und übergeben Sie sie an die Argumente a und b, dh 11 und 0. Das Ergebnis dieser Operation wird in der Variablen c gespeichert.
  15. Drucken Sie den Wert der Variablen c auf der Konsole aus.
  16. Ende des Körpers des Try / Catch-Blocks.
  17. Fangen Sie die Ausnahme. Die zurückgegebene Fehlermeldung wird in der variablen Meldung gespeichert.
  18. Drucken Sie die zurückgegebene Fehlermeldung auf der Konsole aus.
  19. Ende des Körpers des Fangblocks.
  20. Das Programm sollte nach erfolgreicher Ausführung einen Wert zurückgeben.
  21. Ende des Hauptfunktionskörpers ().

C ++ - Standardausnahmen

C ++ enthält eine Liste der Standardausnahmen, die in der Klasse definiert sind. Diese werden nachfolgend beschrieben:

Ausnahme Beschreibung
std :: Ausnahme Dies ist eine Ausnahme und die übergeordnete Klasse aller Standard-C ++ - Ausnahmen.
std :: bad_alloc Diese Ausnahme wird durch ein neues Schlüsselwort ausgelöst.
std :: bad_cast Dies ist eine Ausnahme, die von dynamic_cast ausgelöst wird.
std :: bad_exception Ein nützliches Gerät zur Behandlung unerwarteter Ausnahmen in C ++ - Programmen.
std :: bad_typeid Eine von typeid ausgelöste Ausnahme.
std :: logic_error Diese Ausnahme ist theoretisch durch Lesen von Code erkennbar.
std :: domain_error Dies ist eine Ausnahme, die nach Verwendung einer mathematisch ungültigen Domäne ausgelöst wird.
std :: invalid_argument Eine Ausnahme für die Verwendung ungültiger Argumente.
std :: length_error Eine Ausnahme, die nach dem Erstellen eines großen std :: string ausgelöst wird.
std :: out_of_range Bei Methode geworfen.
std :: runtime_error Dies ist eine Ausnahme, die beim Lesen des Codes nicht erkannt werden kann.
std :: overflow_error Diese Ausnahme wird nach dem Auftreten eines mathematischen Überlaufs ausgelöst.
std :: range_error Diese Ausnahme wird ausgelöst, wenn Sie versuchen, einen Wert außerhalb des Bereichs zu speichern.
std :: underflow_error Eine Ausnahme, die nach dem Auftreten eines mathematischen Unterlaufs ausgelöst wird.

Benutzerdefinierte Ausnahmen

Mit der C ++ std :: exception-Klasse können wir Objekte definieren, die als Ausnahmen ausgelöst werden können. Diese Klasse wurde im Header definiert. Die Klasse stellt uns eine virtuelle Mitgliedsfunktion mit dem Namen what zur Verfügung.

Diese Funktion gibt eine nullterminierte Zeichenfolge vom Typ char * zurück. Wir können es in abgeleiteten Klassen überschreiben, um eine Ausnahmebeschreibung zu erhalten.

Beispiel:

#include #include 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;}

Ausgabe:

Hier ist ein Screenshot des Codes:

Code Erläuterung:

  1. Fügen Sie die iostream-Header-Datei in unser Programm ein. Wir werden seine Funktionen ohne Fehler verwenden.
  2. Fügen Sie die Ausnahmekopfdatei in unser Programm ein. Wir werden seine Funktionen wie was ohne Fehler verwenden.
  3. Nehmen Sie den Standard-Namespace in unser Programm auf, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  4. Erstellen Sie eine neue Klasse mit dem Namen newException. Diese Klasse erbt die Ausnahmeklasse von C ++.
  5. Der Beginn des Klassenkörpers.
  6. Überschreiben Sie die virtuelle Mitgliedsfunktion what (), die in der Ausnahmeheaderdatei definiert ist. Wir werden dann unsere eigene Ausnahme beschreiben, die neue Ausnahme.
  7. Starten Sie die Definition der neuen Ausnahme.
  8. Die Nachricht, die zurückgegeben werden soll, wenn die neue Ausnahme abgefangen wird.
  9. Ende der Definition der neuen Ausnahme.
  10. Ende des Hauptteils der Klasse newException. Der newex ist der Name, der verwendet wird, um unsere neue Ausnahme abzufangen. Danach wird die newException aufgerufen.
  11. Rufen Sie die Funktion main () auf. Die Programmlogik sollte in ihrem Hauptteil hinzugefügt werden. Das {markiert den Anfang seines Körpers.
  12. Verwenden Sie eine try-Anweisung, um den Code zu markieren, in dem die Ausnahme markiert werden muss. Das {markiert den Beginn des Körpers des Try / Catch-Blocks. Der davon umgebene Code wird geschützt.
  13. Wirf die Newex-Ausnahme, wenn sie abgefangen wird.
  14. Ende des Versuchskörpers.
  15. Verwenden Sie die catch-Anweisung, um die Ausnahme abzufangen. Die Ausnahmefehlermeldung wird in der Variablen ex gespeichert.
  16. Drucken Sie die Ausnahmefehlermeldung auf der Konsole.
  17. Ende der Fanganweisung.
  18. Das Programm sollte einen Wert zurückgeben, wenn es erfolgreich ausgeführt wird.
  19. Ende des Körpers der main () - Funktion.

Zusammenfassung:

  • Mit der Ausnahmebehandlung in C ++ können Sie Laufzeitfehler behandeln.
  • Laufzeitfehler sind die Fehler, die während der Programmausführung auftreten.
  • Die Ausnahmebehandlung hilft Ihnen dabei, unerwartete Umstände in Ihrem Programm zu behandeln.
  • Wenn der unerwartete Umstand eintritt, wird die Programmsteuerung an die Handler übertragen.
  • Um eine Ausnahme abzufangen, platzieren Sie einen Codeabschnitt unter dem Try-Catch-Block.
  • Das Schlüsselwort throw hilft dem Programm, Ausnahmen auszulösen, und hilft dem Programm, das Problem zu lösen.
  • Das Schlüsselwort try hilft dabei, den Codeblock zu identifizieren, für den bestimmte Ausnahmen aktiviert werden.
  • Wir können die what () - Funktion der Ausnahmeheaderdatei überschreiben, um unsere Ausnahmen zu definieren.