Własny wyjątek w C++
Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji
Własny wyjątek w C++ definiuje się najczęściej przez utworzenie klasy dziedziczącej po std::exception. Dzięki temu obiekt wyjątku może być obsługiwany tak samo jak standardowe wyjątki biblioteki C++.
Jak zdefiniować własny wyjątek?
Należy:
- dołączyć nagłówek <exception>,
- utworzyć klasę dziedziczącą po std::exception,
- przesłonić metodę what(), która zwraca opis błędu,
- zgłosić wyjątek instrukcją throw,
- obsłużyć go w bloku catch.
Przykład
#include <iostream>
#include <exception>
using namespace std;
class MojWyjatek : public exception {
public:
const char* what() const noexcept override {
return "Wystapil moj wlasny wyjatek";
}
};
int main() {
try {
throw MojWyjatek();
}
catch (const exception& e) {
cout << e.what() << endl;
}
return 0;
}
Ważne elementy
Metoda what() pochodzi z klasy std::exception. Zwraca komunikat opisujący błąd. Słowo override oznacza, że metoda przesłania metodę klasy bazowej. noexcept informuje, że metoda nie powinna zgłaszać wyjątków.
Dlaczego dziedziczyć po std::exception?
Dziedziczenie po std::exception jest dobrą praktyką, ponieważ pozwala obsługiwać własne i standardowe wyjątki w jednolity sposób, np. przez catch (const std::exception& e). Nie wystarczy sam pusty blok catch ani samo użycie try — własny wyjątek trzeba jawnie zdefiniować jako klasę.