latajacaryba Temat założony przez niniejszego użytkownika |
Funkcje wirtualne - ale po co mi to? » 2017-01-28 13:47:44 Witam. Czytałem, że funkcje wirtualne przydają się podczas dziedziczenia. Jeśli w klasie pochodnej zmienimy ciało funkcji zdefiniowanej/zadeklarowanej z przedrostkiem virtual w klasie podstawowej, to tworząc obiekt klasy pochodnej i wskaźnik klasy podstawowej, a następnie ustawiając wskaźnik na obiekt i wywołamy na rzecz tego wskaźnika funkcję wirtualną, to wywoła się funkcja, która jest zdefiniowana W KLASIE POCHODNEJ. Dobra, ale po co nam to? Przecież możemy ustawić sobie wskaźnik klasy pochodnej na obiekt klasy pochodnej. Po co ustawiać wskaźnik KLASY PODSTAWOWEJ na obiekt KLASY POCHODNEJ? |
|
karambaHZP |
» 2017-01-28 14:29:07 Na tym polega OOP. Samo ma się orientować, z którym obiektem ma do czynienia. Są niezbędne do polimorfizmu. |
|
mateczek |
» 2017-01-28 14:39:37 Choćby taki przykład. Coś tam wspomniałeś o Qt. Więc pisząc własną klasę dziedziczącą po QWidget i reimplemetnując funkcję wirtualną, mogę coś na widgecie namalować. https://www.youtube.com/watch?v=Ir3BDVpGfNE W momencie gdy wywoła się funkcja widtet.paint() wywołuje się tak naprawdę moja funkcja. |
|
jankowalski25 |
» 2017-01-28 15:30:45 Przecież możemy ustawić sobie wskaźnik klasy pochodnej na obiekt klasy pochodnej. |
Przykład: Masz napisaną klasę Figura , która zawiera metodę obliczPole() . Masz tablicę lub jakiś kontener, w którym trzymasz wartości typu Figura * . Teraz chcesz napisać funkcję, która obliczy sumę pól wszystkich figur. Po co ręcznie sprawdzać, czy dany element jest obiektem klasy Kwadrat , Trapez albo Deltoid ? Prosisz o podanie pola i dostajesz wynik działania odpowiedniej metody z klasy pochodnej. A co, jeśli zechcesz dodać dwadzieścia innych typów figur? |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-01-28 15:52:12 @Up No ale właściwie ile takich przypadków będę miał w życiu? 10? 15? To tylko po to stworzono virtual? @Mateczek Film bardzo fajny, szkoda tylko, że nie tłumaczysz dokładnie do czego służą implementowane biblioteki, czy biblioteki z których dziedziczysz. Chociaż może się czepiam, pewnie ten film jest skierowany do bardziej zaawansowanych w QT. |
|
karambaHZP |
» 2017-01-28 18:19:29 ile takich przypadków będę miał w życiu? 10? 15? |
Jeśli będziesz programować OOP, będziesz cały czas korzystał z virtual . |
|
Gibas11 |
» 2017-01-28 18:54:46 Pisząc grę w SFML będziesz musiał to zrobić nie raz, choćby pisząc sensowną klasę w stylu DrawableActor gdy domyślny sf::Sprite przestanie Ci wystarczać. Albo pisząc własny widget w Qt, backend (jeśli można to tak nazwać) nie wie jakie obiekty rysuje, więc bez virtual się nie obędzie. A pisząc w C++ własny silnik gry będziesz miał to nawet w co drugiej klasie. |
|
Rashmistrz |
» 2017-01-28 18:56:56 Na przykład ja w ogóle nie korzystam z funkcji wirtualnych, bo nie używam klas i dziedziczenia. Jak już to wskaźniki do funkcji. |
|
« 1 » 2 |