zurück weiter

Ausnahmebehandlung (2)

G.Eichelsdörfer
Staatliche Technikerschule Weilburg

Eine in einem try-Block aufgetretene Ausnahme wird mit catch aufgefangen und kann bearbeitet werden:

// try-Block
catch(...) // Jegliche Ausnahme wird behandelt
{
 cerr << "Ausnahme aufgetreten." << endl;
}
...

Statt der drei Punkte hinter catch wird zumeist der Typ einer Ausnahmeinformation, kurz der Ausnahmetyp, zusammen mit einer Ausnahmevariablen (Objekt, Instanz) angegeben. Dann werden an dieser Stelle auch nur Ausnahmen dieses Typs behandelt.

Beispiel:

catch (int id) // Es werden nur Ausnahmen des Typs int behandelt.
{
 cerr << "Ausnahmecode " << id << " aufgetreten." << endl;
}

Falls z.B. eine Ausnahme des Typs float eintritt, wird sie an dieser Stelle nicht behandelt.

Wo kommen die Ausnahmen als Störungsmeldungen her?

Antwort: Sie werden geworfen.

Eine Funktion, die eine Ausnahme meldet (nicht bearbeitet!!!), wirft diese aus.

Beispiel:
Diese Funktion wirft eine Ausnahme vom Typ int. Das erkennen Sie an der Anweisung throw 1 (s.u.).

double Kehrwert(double x)
{
 if (x==0.0throw 1// Ausnahme melden
 return 1/x;
}

Vorsicht!!!
Der Ausnahmetyp, hier int, hat nichts mit dem Parametertyp oder dem Resultatstyp zu tun. Er ist der Typ für die Ausnahmeinformation.

Für den Ausnahmetyp gibt es in C++ keine Einschränkung. Er kann also ebenso double, ein String, irgendein Array, ein struct oder noch besser eine Klasse (OOP) sein.

Die folgende Sequenz behandelt die Ausnahme "Division durch Null". Im Ausnahmefall wird der y-Inhalt nicht ausgegeben. Deshalb sollte diese Ausgabe nicht hinter der Fehlerbehandlung stehen.

try
{
 y = Kehrwert(x); // Hier kann eine Ausnahme gemeldet werden.
 cout << "Der Kehrwert von " << x << " ist " << y << ".\n" << endl;
}
catch(int id)
{
 cerr << "Ausnahme " << id << " aufgetreten." << endl;
}
... // Hier folgen weitere Anweisungen.

Ein try-catch-Konstrukt ist eine Anweisungssequenz. Im Allgemeinen folgen dahinter weitere Anweisungen, die anschließend ausgeführt werden.

Komplette Beispiele folgen.