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

c++ sprawdzanie typu obiektu

+2 głosów
1,490 wizyt
pytanie zadane 1 listopada 2016 w C i C++ przez Arturo332 Początkujący (250 p.)

Witam,

Postaram się zarysować mój problem:

Posiadam klasę World, ktora zawiera w sobie tablicę wskaźników na obiekty typu Postac;

Klasa Postac jest klasą bazową, po której dziedziczą klasa Wojownik oraz klasa Mag;

Po tych 2 klasach dziedziczą z kolei inne (patrz przykład)

class Postac
class Wojownik::public Postac
class Mag::public Postac
class Berzerker::public Wojowniik
class Paladyn:::public Wojownik
class Necromancer::public Mag
class Infernalist::public Mag

W klasie Postac znajduje się czysto wirtualna metoda walka();, natomiast klasy Mag i Wojownik nadpisuja metodę walka(), która to z kolei nie jest już czysto wirtualna; (ponieważ ta metoda ma szansę się wywołać, jesli jakas klasa dziedzicząca po klasie Mag lub Wojownik nie ma swojej metody walka();)

Jak już wspomnialem, po klasach Wojownik i Mag dziedzicza różne klasy np. po klasie Wojownik: paladyn, berzerker itd., a po klasie Mag: necromancer, infernalist itd.. Część z tych klas nadpisuje metode walka(), a czesc dziedziczy taka postac, jaka jest w ich bazowych klasach.

Metoda walka(); dla załóżmy klasy Wojownik ma zachowywać się tak, że jeśli spotkają się ci sami wojownicy(ten sam typ wojownika) np. berzerker z berzerkerem, to pozostają neutralni wobec siebie i się rozchodzą, jeśli natomiast 2 inne typy się zpotkają np. berzerker z paladynem, to dochodzi do walki.

I tutaj meritum, jak w metodzie walka();, pisząc ją dla klasy Wojownik sprawdzić czy obiekty, które się spotykają są tego samego typu czy innego(żeby mogły się rozejść lub walczyć).

1 odpowiedź

+1 głos
odpowiedź 1 listopada 2016 przez Ehlert Ekspert (215,070 p.)

W c++ oprócz tricku z dynamic_cast'em nie ma jako tako odpowiednika dla PHPowego operatora instaceof. Dlatego niczym w Symfonowych formularzach robisz taką funkcję (w symfony zdaje się to było getName i getParent):

class StrongWarrior
{
public:
   virtual std::string getClassName() const;
}

std::string StrongWarrior::getClassName() const
{
   return "StrongWarrior";
}
komentarz 1 listopada 2016 przez Ehlert Ekspert (215,070 p.)

Chyba, że jesteś wytrwały wtedy możesz stworzyć instanceof korzystając z tutoriala.

Podobne pytania

0 głosów
3 odpowiedzi 825 wizyt
+1 głos
1 odpowiedź 350 wizyt
pytanie zadane 2 marca 2018 w C i C++ przez Paweł Dymek Bywalec (2,300 p.)
0 głosów
0 odpowiedzi 286 wizyt
pytanie zadane 27 lutego 2018 w Mikrokontrolery przez Paweł Dymek Bywalec (2,300 p.)

93,631 zapytań

142,554 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...