C++-Ausnahmebehandlung:Try, Catch, Throw Beispiel
Was ist Ausnahmebehandlung in C++?
Die Ausnahmebehandlung in C++ bietet Ihnen eine Möglichkeit, mit unerwarteten Umständen wie Laufzeitfehlern umzugehen. Wann immer also ein unerwarteter Umstand eintritt, wird die Programmsteuerung an spezielle Funktionen übertragen, die als Handler bekannt sind.
Um die Ausnahmen abzufangen, unterziehen Sie einen bestimmten Codeabschnitt der 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 Ausnahmehandler die Kontrolle über das Programm.
Falls keine Ausnahmesituation eintritt, 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 zur 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 wird besser lesbar und einfacher zu warten sein.
- Funktionen können die von ihnen gewählten Ausnahmen behandeln. Selbst wenn eine Funktion viele Ausnahmen auslöst, behandelt sie nur einige. Der Aufrufer behandelt die nicht abgefangenen Ausnahmen.
Schlüsselwörter zur Ausnahmebehandlung
Die Ausnahmebehandlung in C++ dreht sich um diese drei Schlüsselwörter:
- werfen – Wenn ein Programm auf ein Problem stößt, löst es eine Ausnahme aus. Das Schlüsselwort throw hilft dem Programm, den Throw auszuführen.
- fangen – 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.
- versuchen – Der try-Block identifiziert den Codeblock, für den bestimmte Ausnahmen aktiviert werden. Es sollten ein oder mehrere catch-Blöcke folgen.
Angenommen, ein Codeblock löst eine Ausnahme aus. Die Ausnahme wird von einer Methode abgefangen, die try- und catch-Schlüsselwörter verwendet. Der Try/Catch-Block sollte Code umgeben, der möglicherweise eine Ausnahme auslöst. Dieser Code wird als geschützter Code bezeichnet.
Syntax:
Try/Catch hat 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 abzufangenden Ausnahme.
- Ausnahme1, Ausnahme2 und AusnahmeN sind Ihre definierten Namen zum Verweisen auf die Ausnahmen.
Beispiel 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; }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Schließen Sie die iostream-Header-Datei in das Programm ein, um seine Funktionen zu nutzen.
- Fügen Sie die Vektor-Header-Datei in das Programm ein, um seine Funktionen zu nutzen.
- Fügen Sie den std-Namensraum in das Programm in seine Klassen ein, ohne es aufzurufen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte in ihrem Körper hinzugefügt werden.
- Erstellen Sie einen Vektor namens vec, um Integer-Daten zu speichern.
- Füge das Element 0 zum Vektor namens vec hinzu.
- Fügen Sie das Element 1 zum Vektor namens vec hinzu.
- Ein Kommentar. Sie wird vom C++-Compiler übersprungen.
- Verwenden Sie die try-Anweisung, um eine Ausnahme abzufangen. Das { markiert den Anfang des Hauptteils des try/catch-Blocks. Der im Text hinzugefügte Code wird zum geschützten Code.
- Versuchen Sie, auf das Element zuzugreifen, das an Index 2 (drittes Element) des Vektors namens vec gespeichert ist. Dieses Element existiert nicht.
- Ende des Rumpfes des Try/Catch-Blocks.
- Fangen Sie die Ausnahme ab. Die zurückgegebene Fehlermeldung wird in der Variablen ex gespeichert.
- Eine Meldung auf der Konsole ausgeben, wenn die Ausnahme abgefangen wird.
- Ende des Körpers des catch-Blocks.
- Das Programm sollte bei erfolgreicher Ausführung einen Wert zurückgeben.
- Ende des Hauptteils der main()-Funktion.
Beispiel 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; }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Schließen Sie die iostream-Header-Datei in das Programm ein, um seine Funktionen zu nutzen.
- Fügen Sie den std-Namensraum in das Programm in seine Klassen ein, ohne es aufzurufen.
- Erstellen Sie eine Funktion namens zeroDivision, die zwei ganzzahlige Argumente, x und y, akzeptiert. Die Funktion sollte ein doppeltes Ergebnis zurückgeben.
- Verwenden Sie eine if-Anweisung, um zu prüfen, ob der Wert des Variablenarguments y 0 ist. Das { markiert den Anfang des if-Körpers.
- Die Nachricht, die zurückgegeben/geworfen werden soll, wenn y gleich 0 ist.
- Ende des Hauptteils der if-Anweisung.
- Die zeroDivision-Funktion sollte den Wert von x/y zurückgeben.
- Ende des Hauptteils der Funktion zeroDivision.
- Rufen Sie die Methode main() auf. Das { markiert den Beginn dieser Methode.
- Deklarieren Sie eine Integer-Variable und weisen Sie ihr den Wert 11 zu.
- Deklarieren Sie eine Integer-Variable b und weisen Sie ihr den Wert 0 zu.
- Deklarieren Sie eine Double-Variable c und weisen Sie ihr den Wert 0 zu.
- Verwenden Sie die try-Anweisung, um eine Ausnahme abzufangen. Das { markiert den Anfang des Hauptteils des try/catch-Blocks. Der im Text hinzugefügte Code wird zum geschützten Code.
- Aufruf der Funktion zeroDivision und Übergabe an die Argumente a und b, also 11 und 0. Das Ergebnis dieser Operation wird in Variable c gespeichert.
- Den Wert der Variable c auf der Konsole ausgeben.
- Ende des Rumpfes des Try/Catch-Blocks.
- Fangen Sie die Ausnahme ab. Die zurückgegebene Fehlermeldung wird in der Variable message gespeichert.
- Drucken Sie die zurückgegebene Fehlermeldung auf der Konsole aus.
- Ende des Körpers des catch-Blocks.
- Das Programm sollte bei erfolgreicher Ausführung einen Wert zurückgeben.
- Ende des Hauptteils der main()-Funktion.
C++-Standardausnahmen
C++ enthält eine Liste von Standardausnahmen, die in der Klasse
Benutzerdefinierte Ausnahmen
Die C++-Klasse std::exception ermöglicht es uns, Objekte zu definieren, die als Ausnahmen ausgelöst werden können. Diese Klasse wurde im Header
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 <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; }
Ausgabe:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Fügen Sie die iostream-Header-Datei in unser Programm ein. Wir werden seine Funktionen verwenden, ohne Fehler zu erhalten.
- Fügen Sie die Ausnahme-Header-Datei in unser Programm ein. Wir werden seine Funktionen wie fehlerfrei verwenden.
- Fügen Sie den std-Namensraum in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Erstellen Sie eine neue Klasse namens newException. Diese Klasse erbt die Ausnahmeklasse von C++.
- Der Beginn des Klassenkörpers.
- Überschreiben Sie die virtuelle Elementfunktion what(), die in der Ausnahme-Header-Datei definiert ist. Anschließend beschreiben wir unsere eigene Ausnahme, die neue Ausnahme.
- Starten Sie die Definition der neuen Ausnahme.
- Die Nachricht, die zurückgegeben werden soll, wenn die neue Ausnahme abgefangen wird.
- Ende der Definition der neuen Ausnahme.
- Ende des Hauptteils der Klasse newException. Der newex ist der Name, der verwendet werden soll, um unsere neue Ausnahme abzufangen, wonach die newException aufgerufen wird.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte in ihrem Körper hinzugefügt werden. Das { markiert den Anfang seines Körpers.
- Verwenden Sie eine try-Anweisung, um den Code zu markieren, in dem wir die Ausnahme markieren müssen. Das { markiert den Anfang des Hauptteils des try/catch-Blocks. Der davon umgebene Code wird geschützt.
- Werfen Sie die newex-Ausnahme aus, wenn sie abgefangen wird.
- Ende des Try-Body.
- Verwenden Sie die catch-Anweisung, um die Ausnahme abzufangen. Die Ausnahmefehlermeldung wird in der Variablen ex gespeichert.
- Drucken Sie die Ausnahmefehlermeldung auf der Konsole.
- Ende des Hauptteils der catch-Anweisung.
- Das Programm sollte einen Wert zurückgeben, wenn es erfolgreich ausgeführt wird.
- Ende des Hauptteils der Funktion main().
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, mit unerwarteten Umständen in Ihrem Programm umzugehen.
- Wenn der unerwartete Umstand eintritt, wird die Programmsteuerung an Handler übertragen.
- Um eine Ausnahme abzufangen, platzieren Sie einen Codeabschnitt unter dem Try-Catch-Block.
- Das throw-Schlüsselwort hilft dem Programm, Ausnahmen auszulösen, und hilft dem Programm, das Problem zu handhaben.
- Das Schlüsselwort try hilft dabei, den Codeblock zu identifizieren, für den bestimmte Ausnahmen aktiviert werden.
- Wir können die what()-Funktion der Ausnahme-Header-Datei überschreiben, um unsere Ausnahmen zu definieren.
C Sprache
- C++-Kommentare
- Python-Ausnahmebehandlung Mit der try-, except- und finally-Anweisung
- Java-Ausnahmebehandlung
- Java versuchen ... fangen
- C++ Switch Case-Anweisung mit BEISPIEL
- C++ Dynamische Zuordnung von Arrays mit Beispiel
- C++-Struktur mit Beispiel
- std::list in C++ mit Beispiel
- Unterschied zwischen Struktur und Klasse:Erklärt mit C++-Beispiel
- 15 Beste C++-IDE:Kostenloser Windows-Editor | Compiler | 2021