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

Obiekty abstrakcyjne

Object Storage Arubacloud
0 głosów
252 wizyt
pytanie zadane 11 listopada 2015 w C i C++ przez GameProgrammer Obywatel (1,140 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,320 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,140 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,320 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,140 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,320 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,140 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ź 165 wizyt
0 głosów
0 odpowiedzi 269 wizyt
pytanie zadane 22 stycznia 2021 w Java przez stronek1899 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 191 wizyt

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...