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

c++ sprawdzanie typu obiektu

Object Storage Arubacloud
+2 głosów
1,284 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 (212,670 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 (212,670 p.)

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

Podobne pytania

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

92,568 zapytań

141,422 odpowiedzi

319,638 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!

...