Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++-Ausnahmebehandlung

Eine Ausnahme ist ein Problem, das während der Ausführung eines Programms auftritt. Eine C++-Ausnahme ist eine Reaktion auf einen außergewöhnlichen Umstand, der während der Ausführung eines Programms auftritt, z. B. der Versuch, durch Null zu dividieren.

Ausnahmen bieten eine Möglichkeit, die Kontrolle von einem Teil eines Programms auf einen anderen zu übertragen. Die C++-Ausnahmebehandlung basiert auf drei Schlüsselwörtern:try, catch, und werfen .

Unter der Annahme, dass ein Block eine Ausnahme auslöst, fängt eine Methode eine Ausnahme mit einer Kombination aus try ab und fangen Schlüsselwörter. Ein Try/Catch-Block wird um den Code platziert, der möglicherweise eine Ausnahme generiert. Code innerhalb eines Try/Catch-Blocks wird als geschützter Code bezeichnet, und die Syntax für die Verwendung von Try/Catch lautet wie folgt:−

try {
   // protected code
} catch( ExceptionName e1 ) {
   // catch block
} catch( ExceptionName e2 ) {
   // catch block
} catch( ExceptionName eN ) {
   // catch block
}

Sie können mehrere Fänge auflisten -Anweisungen, um verschiedene Arten von Ausnahmen abzufangen, falls Sie es versuchen Block löst in verschiedenen Situationen mehr als eine Ausnahme aus.

Ausnahmen auslösen

Ausnahmen können überall innerhalb eines Codeblocks mit throw geworfen werden Aussage. Der Operand der throw-Anweisung bestimmt einen Typ für die Ausnahme und kann ein beliebiger Ausdruck sein, und der Typ des Ergebnisses des Ausdrucks bestimmt den Typ der ausgelösten Ausnahme.

Das Folgende ist ein Beispiel für das Auslösen einer Ausnahme, wenn die Bedingung zum Teilen durch Null auftritt −

double division(int a, int b) {
   if( b == 0 ) {
      throw "Division by zero condition!";
   }
   return (a/b);
}

Abfangen von Ausnahmen

Der Fang Block nach dem try block fängt jede Ausnahme ab. Sie können angeben, welche Art von Ausnahme Sie abfangen möchten, und dies wird durch die Ausnahmedeklaration bestimmt, die in Klammern nach dem Schlüsselwort catch erscheint.

try {
   // protected code
} catch( ExceptionName e ) {
  // code to handle ExceptionName exception
}

Obiger Code fängt eine Ausnahme von ExceptionName ab Typ. Wenn Sie angeben möchten, dass ein catch-Block jede Art von Ausnahme behandeln soll, die in einem try-Block geworfen wird, müssen Sie ein Auslassungszeichen, ..., wie folgt zwischen die Klammern setzen, die die Ausnahmedeklaration einschließen:−

try {
   // protected code
} catch(...) {
  // code to handle any exception
}

Das Folgende ist ein Beispiel, das eine Division-durch-Null-Ausnahme auslöst und wir fangen sie im catch-Block ab.

Live-Demo
#include <iostream>
using namespace std;

double division(int a, int b) {
   if( b == 0 ) {
      throw "Division by zero condition!";
   }
   return (a/b);
}

int main () {
   int x = 50;
   int y = 0;
   double z = 0;
 
   try {
      z = division(x, y);
      cout << z << endl;
   } catch (const char* msg) {
     cerr << msg << endl;
   }

   return 0;
}

Weil wir eine Ausnahme vom Typ const char* auslösen , also müssen wir beim Abfangen dieser Ausnahme const char* im catch-Block verwenden. Wenn wir den obigen Code kompilieren und ausführen, würde dies das folgende Ergebnis erzeugen −

Division by zero condition!

C++-Standardausnahmen

C++ stellt eine Liste von Standardausnahmen bereit, die in definiert sind die wir in unseren Programmen verwenden können. Diese sind in einer unten gezeigten Eltern-Kind-Klassenhierarchie angeordnet −

Hier ist die kleine Beschreibung jeder Ausnahme, die in der obigen Hierarchie erwähnt wird −

Sr.No Ausnahme &Beschreibung
1

std::Ausnahme

Eine Ausnahme und übergeordnete Klasse aller standardmäßigen C++-Ausnahmen.

2

std::bad_alloc

Dies kann durch new geworfen werden .

3

std::bad_cast

Dies kann durch dynamic_cast geworfen werden .

4

std::bad_exception

Dies ist ein nützliches Gerät, um unerwartete Ausnahmen in einem C++-Programm zu behandeln.

5

std::bad_typeid

Dies kann durch typeid geworfen werden .

6

std::logic_error

Eine Ausnahme, die theoretisch durch Lesen des Codes erkannt werden kann.

7

std::domain_error

Dies ist eine Ausnahme, die ausgelöst wird, wenn eine mathematisch ungültige Domain verwendet wird.

8

std::invalid_argument

Dies wird aufgrund ungültiger Argumente ausgelöst.

9

std::length_error

Dies wird geworfen, wenn ein zu großer std::string erstellt wird.

10

std::out_of_range

Dies kann durch die 'at'-Methode geworfen werden, zum Beispiel ein std::vector und std::bitset<>::operator[]().

11

std::runtime_error

Eine Ausnahme, die theoretisch nicht durch Lesen des Codes erkannt werden kann.

12

std::overflow_error

Dies wird ausgelöst, wenn ein mathematischer Überlauf auftritt.

13

std::range_error

Dies tritt auf, wenn Sie versuchen, einen Wert zu speichern, der außerhalb des zulässigen Bereichs liegt.

14

std::underflow_error

Dies wird ausgelöst, wenn ein mathematischer Unterlauf auftritt.

Neue Ausnahmen definieren

Sie können Ihre eigenen Ausnahmen definieren, indem Sie Ausnahme erben und überschreiben Klasse Funktionalität. Das folgende Beispiel zeigt, wie Sie die Klasse std::exception verwenden können, um Ihre eigene Ausnahme auf standardmäßige Weise zu implementieren −

Live-Demo
#include <iostream>
#include <exception>
using namespace std;

struct MyException : public exception {
   const char * what () const throw () {
      return "C++ Exception";
   }
};
 
int main() {
   try {
      throw MyException();
   } catch(MyException& e) {
      std::cout << "MyException caught" << std::endl;
      std::cout << e.what() << std::endl;
   } catch(std::exception& e) {
      //Other errors
   }
}

Dies würde zu folgendem Ergebnis führen −

MyException caught
C++ Exception

Hier, was() ist eine öffentliche Methode, die von der Ausnahmeklasse bereitgestellt wird und von allen untergeordneten Ausnahmeklassen überschrieben wurde. Dies gibt die Ursache einer Ausnahme zurück.


C Sprache

  1. C++-Operatoren
  2. C++-Kommentare
  3. C++-Klassenvorlagen
  4. C Dateiverwaltung
  5. Java-Ausnahmebehandlung
  6. C++-Ausnahmebehandlung:Try, Catch, Throw Beispiel
  7. Python-Ausnahmebehandlung:Try, Catch, Final &Raise [Beispiel]
  8. C - Fehlerbehandlung
  9. C++-Übersicht
  10. C++ Konstanten/Literale