Przejdź do głównej treści
  1. Strona główna
  2. Słownik
  3. INF.04
  4. Własny wyjątek w C++

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ę.