Exception ist ein Kernkonzept von C++. Ausnahmen treten auf, wenn während der Ausführung ein unerwünschter oder unmöglicher Vorgang auftritt. Die Behandlung dieser unerwünschten oder unmöglichen Vorgänge in C++ wird als Ausnahmebehandlung bezeichnet. Bei der Ausnahmebehandlung werden hauptsächlich drei spezifische Schlüsselwörter verwendet: „try“, „catch“ und „throw“. Das Schlüsselwort „try“ wird verwendet, um Code auszuführen, der auf Ausnahmen stoßen kann, das Schlüsselwort „catch“ wird zur Behandlung dieser Ausnahmen verwendet und das Schlüsselwort „throws“ wird zum Erstellen von Ausnahmen verwendet. Ausnahmen in C++ können in zwei Typen unterteilt werden, nämlich STL-Ausnahmen und benutzerdefinierte Ausnahmen. In diesem Artikel konzentrieren wir uns auf die Erstellung dieser benutzerdefinierten Ausnahmen. Weitere Einzelheiten zur Ausnahmebehandlung finden Sie hier.
Zuerst haben wir gesehen, wie man mit einer einzelnen Klasse benutzerdefinierte Ausnahmen erstellt. Dazu müssen wir eine Klasse definieren und eine Ausnahme von dieser Klasse auslösen.
//user-defined class class Test{}; try{ //throw object of that class throw Test(); } catch(Test t) { .... }
#include <iostream> using namespace std; //define a class class Test{}; int main() { try{ //throw object of that class throw Test(); } catch(Test t) { cout << "Caught exception 'Test'!" << endl; } return 0; }
Caught exception 'Test'!
‘try‘-Block löst Ausnahmen dieser Klasse aus, während der ‚catch‘-Block nur Ausnahmen dieser bestimmten Klasse abfängt. Wenn es zwei benutzerdefinierte Ausnahmeklassen gibt, müssen diese separat behandelt werden.
Der Prozess ist erwartungsgemäß einfach. Wenn es mehrere Ausnahmen gibt, muss jede einzeln behandelt werden.
//user-defined class class Test1{}; class Test2{}; try{ //throw object of the first class throw Test1(); } catch(Test1 t){ .... } try{ //throw object of the second class throw Test2(); } catch(Test2 t){ .... }
#include <iostream> using namespace std; //define multiple classes class Test1{}; class Test2{}; int main() { try{ //throw objects of multiple classes throw Test1(); } catch(Test1 t) { cout << "Caught exception 'Test1'!" << endl; } try{ throw Test2(); } catch(Test2 t) { cout << "Caught exception 'Test2'!" << endl; } return 0; }
Caught exception 'Test1'! Caught exception 'Test2'!
Wir mussten zwei verschiedene Try-Catch-Blöcke verwenden, um zwei verschiedene Kategorien von Ausnahmen zu behandeln. Sehen wir uns nun an, ob wir mithilfe von Konstruktoren Ausnahmen erstellen und behandeln können.
Wir können den Klassenkonstruktor verwenden, um benutzerdefinierte Ausnahmen zu erstellen. Im folgenden Beispiel können wir sehen, dass das Auslösen und Behandeln von Ausnahmen im Klassenkonstruktor verwaltet wird.
#include <iostream> using namespace std; //define a class class Test1{ string str; public: //try-catch in the constructor Test1(string str){ try{ if (str == "Hello"){ throw "Exception! String cannot be 'Hello'!"; } this->str = str; } catch(const char* s) { cout << s << endl; } } }; int main() { Test1 t("Hello"); return 0; }
Exception! String cannot be 'Hello'!
Die Ausnahmebehandlung ist eine der wichtigsten Funktionen von C++. Wir können die C++-Ausnahmeklasse erben und sie zum Implementieren der Ausnahmebehandlung verwenden. Dies ist jedoch nur eine bewährte Vorgehensweise und nicht erforderlich, um benutzerdefinierte Ausnahmen zu erstellen. Der Vorteil der Vererbung der C++-Ausnahmeklasse besteht darin, dass bei einer normalen Catch-Anweisung, die std::Exception abfängt, jede benutzerdefinierte Ausnahme behandelt werden kann, ohne dass die spezifischen Details bekannt sein müssen. Es ist zu beachten, dass die „throws“-Anweisung nur innerhalb des „try“-Blocks funktioniert, andernfalls funktioniert sie nicht. Die „catch“-Anweisung kann nur Ausnahmen verarbeiten, die von benutzerdefinierten Klassen oder bestimmten STL-Klassen ausgelöst werden.
Das obige ist der detaillierte Inhalt vonDas C++-Programm erstellt eine benutzerdefinierte Ausnahme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!