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

c++ sprawdzanie typu obiektu

42 Warsaw Coding Academy
+2 głosów
1,404 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,010 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,010 p.)

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

Podobne pytania

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

93,377 zapytań

142,380 odpowiedzi

322,530 komentarzy

62,727 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...