Benutzerdefinierte Ausnahme in C++

Muhammad Husnain 15 Februar 2024
  1. Ausnahmebehandlung in C++
  2. Benutzerdefinierte Ausnahme in C++
Benutzerdefinierte Ausnahme in C++

In diesem kurzen Programmier-Tutorial geht es um die Implementierung benutzerdefinierter Ausnahmeklassen in C++ und grundlegende Regeln zur Implementierung benutzerdefinierter Ausnahmeklassen in C++.

Ausnahmebehandlung in C++

In C++ ist die Ausnahmebehandlung eine Methode zur Behandlung von Laufzeitproblemen. Wir behandeln Ausnahmen, damit der normale Ablauf der Anwendung auch bei Laufzeitproblemen aufrechterhalten werden kann.

In C++ ist eine Ausnahme ein Objekt, das während des Laufzeitprozesses ausgelöst wird und die normale Ausführung des Programms stört.

Die Klasse std::exception ist die Wurzel aller Ausnahmen. Wenn wir keine Ausnahmen behandeln, gibt die Anwendung eine Fehlermeldung aus und wird beendet.

Ausnahmen ermöglichen die Übergabe der Steuerung von einem Programmbereich an einen anderen. Die drei Schlüsselwörter try, catch und throw behandeln Ausnahmen in C++.

  1. throw – Wenn ein Segment in Ihrem Code ein Problem verursachen kann, lösen wir mit dem Schlüsselwort throw eine Ausnahme aus und geben die Art der Ausnahme an, die auftreten kann.
  2. try – Es enthält das Codesegment, das einen Fehler verursachen kann und eine Ausnahme auslösen muss.
  3. catch – der Block, der aufgerufen wird, wenn eine Ausnahme ausgelöst wird. In diesem Codeblock können wir den Benutzer über den Fehler informieren und das Programm bei Bedarf programmgesteuert beenden.

Ein häufiges Beispiel für Ausnahmen ist der Fehler durch Null dividieren, der zur Laufzeit auftritt. Es ist die am häufigsten vorkommende Ausnahme in Programmen.

Schauen wir uns das folgende Code-Snippet an, das anfällig für diese divide by zero-Laufzeitausnahme ist.

#include <iostream>
using namespace std;
float divideFunc(int a, int b) {
  if (b == 0) {
    throw "User made a division with zero!";
  }
  return (a / b);
}
int main() {
  int num1 = 20;
  int num2 = 0;
  float result = 0;
  try {
    result = divideFunc(num1, num2);
    cout << result << endl;
  } catch (const char* msg) {
    cout << msg << endl;
  }
}

Ausgabe:

dividieren durch null Laufzeitausnahme

Ausnahmeklassenhierarchie

Die Ausnahme ist eine Klasse mit vielen Klassen als Unterklassen, und alle diese Klassen sind die Arten von Ausnahmen. C++ verfügt über einen vordefinierten Satz allgemeiner Ausnahmetypen zur einfachen Verwendung in den Programmen.

Ausnahmeklassenhierarchie

Benutzerdefinierte Ausnahme in C++

Benutzerdefinierte Ausnahmen, die nicht in C++ angegeben sind, können unter bestimmten Umständen vorteilhaft sein. In C++ kann jeder Typ, der bestimmte Kriterien erfüllt, abgefangen oder geworfen werden.

Dazu gehört der Typ mit einem gültigen Kopierkonstruktor und -destruktor.

Benutzerdefinierte Ausnahmen bieten den Ausnahmebehandlungsmechanismus mit nützlichen Informationen zu einem Problem. Sie können erstellt werden, indem entweder eine neue Klasse mit den erforderlichen Eigenschaften erstellt und eine Instanz dieser Klasse geworfen wird oder indem sie von std::exception erben und die Funktion what() überschreiben.

Angenommen, wir müssen die positive Zahl in unser Programm eingeben. Wir können eine Ausnahme auslösen, wenn eine negative Zahl eingegeben wird.

Wir können eine benutzerdefinierte Ausnahmeklasse wie folgt erstellen.

class MyExceptionClass : public exception {
 public:
  const char* what() const throw() { return "Negative number not allowed\n"; }
};

Dies kann im Treiberprogramm wie folgt abgefangen werden.

int main() {
  try {
    int a;
    cout << "Enter a number : \n";
    cin >> a;
    if (a < 0) {
      MyExceptionClass c;
      throw c;
    } else {
      cout << "you entered: " << a << endl;
    }
  } catch (exception& e) {
    cout << e.what();
  }
}

Ausgabe:

Ausnahmeausgabe

Wir können im obigen Code sehen, dass wir unsere benutzerdefinierte Ausnahmeklasse mit der Klasse Exception geerbt haben und eine Methode what() überschreiben, die aufgerufen wird, wenn die Ausnahme ausgelöst wird.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Verwandter Artikel - C++ Exception