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

Obiekty abstrakcyjne

VPS Starter 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,340 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,340 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,340 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ź 163 wizyt
0 głosów
0 odpowiedzi 262 wizyt
pytanie zadane 22 stycznia 2021 w Java przez stronek1899 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 186 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...