Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcje wirtualne - ale po co mi to?

Ostatnio zmodyfikowano 2017-01-29 12:50
Autor Wiadomość
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?
P-157054
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.
P-157056
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.
P-157057
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?
P-157059
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.
P-157060
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
.
P-157067
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.
P-157070
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.
P-157071
« 1 » 2
  Strona 1 z 2 Następna strona