• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Obiekty abstrakcyjne

0 głosów
229 wizyt
pytanie zadane 11 listopada 2015 w C i C++ przez GameProgrammer Obywatel (1,150 p.)
Jeżeli mam np. klasę Animation, i od tego dziedziczy klika różnych klas animacji, potem tworzę sobię vector <Animation*> a; I tam składuje wszystkie animację, i mogę się do nich odwoływać, ale każda animacja powinna być aktywna w innych sytuacjach. Powiedzmy gdy klikam A/D to animacja chodu powinna się aktualizować, a jak robi coś innego to znowu inna animacja, inny obiekt. Jak zatem pracując na takich obiektach mogę się do nich odwoływać w odpowiednich sytuacjach?

2 odpowiedzi

0 głosów
odpowiedź 11 listopada 2015 przez Patrycjerz Mędrzec (192,460 p.)

Jeśli masz sytuację np. taką:

+-----------+
| Animation |     Klasa abstrakcyjna
+-----------+
       |
       v
+--------------+
| AnimationOne |   Klasa pochodna
+--------------+
       |
       v
+--------------+
| AnimationTwo |   Klasa pochodna
+--------------+

To wtedy masz kontener zawierający wskaźniki na klasę abstrakcyjną, czyli Animation i taki wskaźnik może przechowywać adres obiektów klas pochodnych. Dzięki temu faktowi oraz polimorfizmowi wynika, że możesz skorzystać z własności metod czystowirtualnych, czyli np.:

std::vector<Animation*> kontener;
kontener.push_back(new AnimationOne);
(kontener[0])->metoda(); // Znając założenia polimorfizmu wiemy, że ta metoda będzie odpowiadała wersji z klasy AnimationOne, a nie Animation, ponieważ w tej drugiej klasie ta metoda nie ma ciała - jest czystowirtualna

 

komentarz 12 listopada 2015 przez GameProgrammer Obywatel (1,150 p.)
Wiem o tym, ja mam na myśli sytuację, gdy wywołanie danej metody wiąże się z pewnymi warunkami. Np. gdy kliknie się A to metoda tego obiektu się uruchomi, gdy D to metoda innego obiektu. No ale jeżeli jest to vector z obiektami, i odwołuje się do nich tylko przez liczby, to nie mogę sobie wybierać odpowiedniego obiektu.

Chyba że w takich sytuacjach takie obiekty tworzy się normalnie w bloku klasy, Obiekt obiekt;?
komentarz 12 listopada 2015 przez Patrycjerz Mędrzec (192,460 p.)
Możesz przechowywać wskaźniki na obiekty, które cię interesują, a potem w każdym miejscu kodu możesz go wykorzystać, aby wykonać operacje na danym obiekcie.
komentarz 13 listopada 2015 przez GameProgrammer Obywatel (1,150 p.)
Jak mam wszystkie wskaźniki w jednym wektorze, to co masz na myśli przechowywać te które mnie interesują?
komentarz 13 listopada 2015 przez Patrycjerz Mędrzec (192,460 p.)
Nie widzę sensu w tworzeniu wielu klas dla tego przypadku. Jeśli chodzi o animacje, to nie różnią się one wiele od siebie - ot liczbą klatek, prędkością i grafikami. To wszystko możesz mieć w jednej klasie, tylko tworzysz obiekty z innymi danymi.
komentarz 13 listopada 2015 przez GameProgrammer Obywatel (1,150 p.)
W moim programie jest więcek klas tego typu, i bardzo się różnią.
0 głosów
odpowiedź 13 listopada 2015 przez Rogargol Pasjonat (16,600 p.)
W Qt jest cos takiego jak QMap ktory przechowuje klucz i typ. Dzieki temu np moglbys sobie do kazdego klawisza przypisac kod i pod tym kodem (jako kluczem) w QMap przechowywac wskaznik do animacji.

Nie uzywajac Qt, mozesz tez pokombinowac nad podobnym rozwiazaniem, mozesz tez np uzyc enum.

Podobne pytania

+1 głos
1 odpowiedź 126 wizyt
0 głosów
0 odpowiedzi 96 wizyt
pytanie zadane 22 stycznia 2021 w Java przez stronek1899 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 135 wizyt

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...