Was sind Ausnahme Mechanismen in C ++?

Gelegentlich funktioniert don # 8242-t Arbeit richtig - auch für erfahrene C ++ Programmierer. Das traditionelle Mittel Versagen der Berichterstattung ist eine Anzeige für den Anrufer zurückzukehren. C ++ enthält einen Mechanismus für die Erfassung und Handhabungsfehler genannt Ausnahmen. Die Handhabung von Fehlerzuständen mit Ausnahmen ist ein Schlüsselbegriff zu verstehen.

Der Ausnahmemechanismus basiert auf den Schlüsselwörtern basiert versuchen, zu fangen, und werfen (Das # 8242-Recht, mehr Variablennamen, die Sie können # 8242-t Gebrauch). Kurz umrissen, funktioniert es wie folgt aus: Eine Funktion Versuche durch ein Stück Code zu erhalten. Wenn der Code ein Problem feststellt, werfens eine Fehleranzeige, dass die anrufende Funktion muss Fang.

Der folgende Codeausschnitt zeigt, wie die in 1 und 0 funktioniert:

// FactorialException - zeigen Ausnahmen mit // eine Fakultätsfunktion // # include #einschließen #einschließen using namespace std - // faktorieller - berechnen factorialint faktorielle (int n) {// können Sie keine negativen Werte von n handhaben - // bessere Kontrolle für diese Bedingung firstif (n lt; 0) {throw Zeichenfolge ( "Argument für faktorielle negativ") -} // voran gehen und factorialint accum = 1-while (n> 0) {accum * = nn ---} return accum-} int main (int berechnen nNumberofArgs , char * pszArgs []) {try {// dies wird workcout lt; lt; "Factorial von 3" lt; lt; faktoriellen (3) lt; lt; Endl - // dies eine exceptioncout erzeugen lt; lt; "Factorial von -1 ist" lt; lt; faktoriellen (-1) lt; lt; Endl - // control nie herecout bekommen lt; lt; "Factorial von 5 ist" lt; lt; faktoriellen (5) lt; lt; Endl -} // geht die Steuerung herecatch (string Fehler) {cout lt; lt; "Ein Fehler ist aufgetreten: " lt; lt; Fehler lt; lt; endl-} catch (...) {cout lt; lt; "Default fangen" lt; lt; Endl -} // warten, bis der Benutzer vor dem Beenden Programm bereit ist, // damit der Benutzer das Programm resultscout zu sehen lt; lt; "Drücken Sie die Eingabetaste, um fortzufahren ..." lt; lt; Endl-cin.ignore (10, ' n') - cin.get () - Rückkehr 0-}

Main() beginnt durch einen Block ausgestattet mit der Schaffung Versuchen Stichwort. Innerhalb dieses Blocks, kann es die Art und Weise vorgehen es wäre, wenn der Block nicht vorhanden waren. In diesem Fall, Main() Versuche, die Fakultät einer negativen Zahl zu berechnen.

Nicht zu hinters Licht geführt, die clevere Fakultät() -Funktion erfasst die gefälschte Anfrage und wirft eine Fehleranzeige die Verwendung von werfen Stichwort. Die Steuerung geht zum Fang Phrase, die unmittelbar auf die schließenden Klammer der folgt Versuchen Block. Der dritte Aufruf Fakultät() nicht durchgeführt.

Durch eine nicht-so-intelligente Funktion namens ein Ausnahmespezifikation, Sie können die Art der Objekte hinzufügen, dass Fakultät() wirft auf seine Erklärung. Zu einer Zeit, dachte, jemand dies eine gute Idee wäre, aber die Zeiten ändern sich. Exception-Spezifikationen waren nie zwingend und haben in der 2011-Standard veraltet.

Menü