C++/Funkcje wirtualne: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
przecinki
+info o metodach abstrakcyjnych
Linia 166:
 
Wyżej opisane działanie zostało spowodowane przez określenie metody w klasie bazowej jako '''wirtualnej'''. Gdyby zostało usunięte słowo kluczowe ''virtual'' w deklaracji metody w klasie bazowej, zostałyby wykonane metody zgodne z typem wskaźnika lub referencji, a więc za każdym razem zostałaby wykonana metoda <code>float pole()</code> z klasy <code>Figura</code>.
 
 
==Funkcje i klasy abstrakcyjne==
 
Niekiedy tworząc klasy nie wiadomo, jak jedną lub więcej metod zrealizować. Np. są to metody mające zapisywać wyniki - a one mogą być zapisywane do pliku, na konsolę, wysyłane przez sieć, być może użytkownik będzie chciał dostać dodatkowe podsumowanie itp. Czyli dana metoda musi się wykonać, ale z punktu widzenia projektu klasy nie chcemy bądź nie możemy wnikać w szczegóły jej działania.
 
Wówczas można użyć '''metod abstrakcyjnych''', które posiadają jedynie deklarację (zakończoną dodatkowo "= 0"); takie metody można wywoływać w innym metodach. Klasa posiadająca przynajmniej jedną metodę wirtualną staje się '''klasą wirtualną''' i nie można utworzyć instancji takiej klasy. Jedynym sposobem na utworzenie instancji jest odziedziczenie po takiej klasie i dodanie definicji '''wszystkich metod wirtualnych'''. Oczywiście możliwe jest dziedziczenie, gdy nie definiuje się wszystkich metod wirtualnych, wówczas taka klasa pochodna nadal jest abstrakcyjna.
 
Przykład deklaracji:
 
<source lang="cpp" highlight="3">
class KlasaAbstracyjna {
 
virtual int wyswietl() = 0;
};
</source>
 
 
<noinclude>