Benutzerdefinierte C++-Ausnahmen

Benutzerdefinierte C Ausnahmen



Ausnahme in C++ ist ein Kernkonzept. Eine Ausnahme tritt zur Ausführungszeit auf, wenn das Programm auf Laufzeitinkonsistenzen oder ungewöhnliche Szenarios stößt. In C++ werden die Begriffe „throw“, „try“ und „catch“ verwendet, um die Ausnahme zu behandeln oder abzufangen. Der Befehl „throw“ wird verwendet, um die Ausnahme zu generieren. Der Begriff „try“ dient dazu, die Ausnahme auszulösen, und das Schlüsselwort „catch“ stellt die Behandlung einer Ausnahme dar, die mit dem Begriff „throw“ entwickelt und vom Abschnitt „try“ ausgelöst wird. Schauen wir uns einige Beispiele an, um die Ausnahmen in C++ zu veranschaulichen.

Beispiel 1: Programm zum Erstellen einer benutzerdefinierten Ausnahmeklasse in C++

Dieses einfache Beispiel wird implementiert, um die benutzerdefinierte Ausnahmebehandlung und -erkennung in C++ zu demonstrieren.

#include
#include
verwenden Namensraum std ;

Klasse DemoException : öffentlich Ausnahme
{
virtuell const verkohlen * Was ( ) const werfen ( )
{
zurückkehren „Benutzerdefinierte Ausnahme abgefangen“ ;
}
} ;
int hauptsächlich ( )
{
DemoException dEx ;
versuchen
{
werfen dEx ;
}
fangen ( Ausnahme & außer )
{
cout << außer. Was ( ) << endl ;
}
zurückkehren 0 ;
}

Wir definieren die Header-Datei im Code, einschließlich „iostream“ und „Exception“. Der „iostream“ wird speziell für den Eingabe- und Ausgabestream aufgerufen, während die „Exception“-Bibliothek zur Behandlung der Ausnahme aufgerufen wird. Anschließend erstellen wir die Klasse „DemoException“, die von der Klasse „Exception“ von C++ abgeleitet ist. Hier legen wir die virtuelle Funktion what() fest, die zur Bereitstellung des const char* verwendet wird, das die Ergebnisse einer Fehlermeldung anzeigt, die mit der Ausnahme verknüpft ist.







Dann rufen wir eine main()-Funktion auf, in der wir das „dEx“-Objekt der „DemoException“-Klasse erstellen. Danach haben wir eine „try“-Blockdefinition, die bei Auftreten die Ausnahme auslöst. Hier werfen wir das „dEx“-Objekt.



Als nächstes setzen wir den „catch“-Block, um die Ausnahme abzufangen und zu behandeln. Wir übergeben die Referenz der Klassenausnahme als Parameter, um die daraus abgeleitete Ausnahme abzufangen. Innerhalb des „catch“-Blocks rufen wir die Funktion what() für „exclusive“ auf, um die Ausnahmemeldung auf der Konsole abzurufen.



Nach der Ausführung des angegebenen Programms wird die benutzerdefinierte Ausnahmemeldung abgefangen und auf der Konsole ausgegeben:





Beispiel 2: Programm zum Erstellen einer benutzerdefinierten Ausnahme mithilfe von zwei Klassen

Das Programm legt Wert auf die Behandlung mehrerer Ausnahmen, die durch die Definition mehrerer Klassen unabhängig voneinander behandelt werden können.



#include
verwenden Namensraum std ;

Klasse Bewertung1 { } ;
Klasse Bewertung2 { } ;

int hauptsächlich ( ) {
versuchen {
werfen Bewertung1 ( ) ;
}
fangen ( Bewertung1 e ) {
cout << „Evaluation1-Ausnahme abgefangen!“ << endl ;
}
versuchen {
werfen Bewertung2 ( ) ;
}
fangen ( Bewertung2 e ) {
cout << „Ausnahme bei Auswertung 2 abgefangen!“ << endl ;
}

zurückkehren 0 ;
}

Im angegebenen Code haben wir die Definition von zwei Klassen, „Evaluation1“ und „Evaluation2“, die jetzt leer sind. Danach führen wir die main()-Funktion des Programms aus. Hier legen wir den try{}-Block fest, in dem das Schlüsselwort „throw“ verwendet wird, um die Instanz der Klasse „Evaluation1()“ auszulösen. Dies bedeutet, dass die Ausnahme „Evaluation1“ ausgelöst wird, wenn im Programm innerhalb dieses „try“-Blocks eine Ausnahme auftritt. Danach haben wir einen Catch{}-Block, in dem die Ausnahme abgefangen wird und die Meldung der Ausnahme angezeigt wird.

Ebenso haben wir eine Definition eines weiteren try{}-Blocks für die Klasse „Evaluation2“. Innerhalb dieses try{}-Blocks werfen wir die Instanz der Klasse „Evaluation2“. Dies löst die Ausnahme „Evaluation2“ aus, wenn hier ein Fehler auftritt. Anschließend rufen wir den Block „catch{}“ auf, um die Ausnahmemeldung mit dem Befehl „cout“ anzuzeigen, wenn die Ausnahme in diesem Block abgefangen wird.

Die beiden Ausnahmen der verschiedenen „Try-Catch“-Blöcke werden in der Konsole ausgelöst und von den beiden verschiedenen Klassen behandelt.

Beispiel 3: Programm zum Erstellen einer benutzerdefinierten Ausnahme mit dem Konstruktor

Das Programm verwendet den Konstruktor zur Behandlung der Ausnahme. Auch wenn wir die Werte nicht vom Konstruktor erhalten können, können wir dies mithilfe des „try-catch“-Blocks erreichen.

#include
verwenden Namensraum std ;

Klasse Prüfen {
int val ;

öffentlich :
Prüfen ( int N )
{
versuchen {
Wenn ( N == 0 )
val = N ;
Anzeige ( ) ;
}

fangen ( const verkohlen * exp ) {
cout << „Ausnahme gefunden \N ' ;
cout << exp << endl ;
}

}

Leere Anzeige ( )
{
cout << „Wert =“ << val << endl ;
}
} ;

int hauptsächlich ( )
{

Prüfen ( 0 ) ;
cout << „Instanz erneut erstellen \N ' ;
Prüfen ( 1 ) ;
}

Im angegebenen Code erstellen wir die Klasse „Test“, in der die Variable als „val“ vom Typ Integer deklariert wird. Dann haben wir eine Definition der Konstruktorfunktion „Test()“, die mit der Variablen „n“ übergeben wird. Anschließend setzen wir den „try-catch“-Block innerhalb der Konstruktorfunktion „Test()“. Der try-Block wird mit der if()-Anweisung aufgerufen. Wenn der Wert von „n“ gleich Null ist, fängt der „catch“-Block die Ausnahme ab und die Ausnahmemeldung wird an der Eingabeaufforderung ausgegeben. Der Wert von „n“ wird in der Variablen „val“ gespeichert, während wir sie initialisieren.

Danach rufen wir die Funktion display() auf, um den Wert anzuzeigen, der in der Variablen „val“ gespeichert ist. Als nächstes haben wir die Definition des „catch“-Blocks, in dem die vom „try“-Block ausgelöste Ausnahme behandelt wird. Zum Schluss rufen wir die Funktion main() auf. Darin rufen wir den Konstruktor „Test()“ auf. Der Konstruktor wird ausgelöst, wenn das Objekt der Klasse „Test()“ erstellt und mit dem Wert „0“ angegeben wird, bei dem die Ausnahme ausgelöst wird.

Danach rufen wir die Klasse „Test()“ erneut auf, um eine Instanz zu erstellen, die mit dem Wert 1 übergeben wird. Hier löst der Konstruktor keine Ausnahme aus, da der Wert ungleich 0 ist. Die Funktion display() wird dies tun Führen Sie den Wert von „val“ aus und geben Sie ihn aus.

Die benutzerdefinierte Ausnahme wird durch den Aufruf des Konstruktors auf der Konsole ausgelöst. Wenn die Bedingung erfüllt ist, wird der Konstruktor außerdem ohne Ausnahme ausgeführt.

Beispiel 4: Programm zum Erstellen einer benutzerdefinierten benutzerdefinierten Ausnahme

Das Programm behandelt und fängt hier die Ausnahme ab, die vom Benutzer definiert wird, wenn er in der Eingabeaufforderung dazu aufgefordert wird.

#include
#include
verwenden Namensraum std ;
Klasse MeineDemo : öffentlich Ausnahme {
öffentlich :
const verkohlen * Was ( ) const werfen ( )
{
zurückkehren „Ausnahme! Habe versucht, durch Null zu dividieren.!“ \N ' ;
}
} ;
int hauptsächlich ( )
{
versuchen
{
int n1, n2 ;
cout << „Geben Sie die beiden ganzen Zahlen ein: \N ' ;
Essen >> n1 >> n2 ;
Wenn ( n2 == 0 )
{
MyDemo n3 ;
werfen n3 ;
}
anders
{
cout << 'n1/n2 = ' << n1 / n2 << endl ;
}
}
fangen ( Ausnahme & exkl )
{
cout << exkl. Was ( ) ;
}
}

Im angegebenen Code definieren wir zunächst die Klasse „MyDemo()“, die die abhängige Klasse der Ausnahme ist. Danach setzen wir die öffentliche Funktion what() mit dem Schlüsselwort „virtual“. Die Funktion what() wird aufgerufen, um die Ursache der Ausnahme im Programm zu ermitteln, wenn die Funktion throw() die Ausnahme auslöst. Dann haben wir eine main()-Funktion, in der die try-catch{}-Blöcke definiert sind, um die Ausnahme zu erkennen und zu behandeln. Innerhalb des try{}-Blocks deklarieren wir zwei Variablen, „n1“ und „n2“, deren Werte vom Benutzer mit dem Befehl „cin“ übernommen werden. Wenn die Werte für jede „n1“- und „n2“-Variable empfangen werden, prüft die „if“-Bedingung, ob die „n2“-Variable gleich 0 ist oder nicht. Wenn dies der Fall ist, wird eine Ausnahme ausgelöst oder die Divisionsergebnisse werden zurückgegeben. Schließlich haben wir einen Catch{}-Block, der die Referenz der „Exception“-Klasse als von ihr geerbten Parameter übernimmt.

Die Ausgabe zeigt, wenn die Bedingung nicht erfüllt ist und das Programm ausnahmslos ausgeführt wird:

Außerdem definieren wir den Wert „0“ für die Variable „n2“, um darzustellen, wie die Ausnahme ausgelöst und im Programm abgefangen wird.

Abschluss

Abschließend haben wir das wichtige Konzept von C++ demonstriert, das eine Ausnahme darstellt. Eine Ausnahme verhindert die reguläre Ausführung des Programms. Dazu haben wir die Schlüsselwörter „throw“, „try“ und „catch“ verwendet, um die im Programm auftretende Ausnahme zu behandeln. Wir haben diese Schlüsselwörter in den vorherigen Beispielen verwendet, um die Ausnahme unterschiedlich zu behandeln.