Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: pekfos
Programowanie obiektowe, C++

Zabranianie dziedziczenia i przesłaniania

[lekcja] 14. Zabranianie dziedziczenia i przesłaniania, czyli słowo final (C++11)

Wprowadzenie

Czasem zdarza się, że chcemy, by jakaś metoda wirtualna od pewnego miejsca hierarchii dziedziczenia pozostawała niezmieniona, albo chcemy, by po danej klasie nie można było dziedziczyć i w ten sposób zamknąć od dołu hierarchię. W C++11 to możliwe i służy do tego słowo final.
Słowo final nie jest kluczowe, ani zarezerwowane. Ma swoje specjalne znaczenie tylko w dalej opisanych przypadkach.
C/C++
int final; // OK

Klasa finalna

Jeśli chcemy utworzyć klasę "finalną", wystarczy, że umieścimy słowo final zaraz, po nazwie klasy
C/C++
class B final
{ };
Próba dziedziczenia po takiej klasie zakończy się błędem kompilacji. Klasa pochodna również może być finalna
C/C++
class X
{ }; //zwykła

class Y final
    : X
{ }; //finalna!

Metoda finalna

Aby oznaczyć metodę wirtualną jako finalną, wystarczy dopisać na koniec deklaracji final (tam, gdzie const w metodach stałych). Próba przesłonięcia takiej metody spowoduje błąd kompilacji
C/C++
class C
{
    virtual void f() final
    { }
};
Poprzedni dokument Następny dokument
Metody wirtualne Dziedziczenie wielobazowe