Forum » Programiranje » [C++] dedovanje in pointerji
[C++] dedovanje in pointerji
darkkk ::
Zanima me naslednje:
imamo npr:
class Animal, nato pa classa Cat in Dog,ki deduje od njega (class Cat : public Animal ter class Dog : public Animal)
potem pa imamo pointerje tipa Animal (torej Animal *), ki ju uporabljamo zato, da kažeta na objekt Dog oz. Cat.
Zanima me, ali lahko iz pointerja Animal kako razberemo na kakšen objekt kaže?
Ena varianta je dati v objekt animal neki int, s katerim pač ločiš Dog od Cat, vendar me zanima ali obstaja kakšen boljši način.
imamo npr:
class Animal, nato pa classa Cat in Dog,ki deduje od njega (class Cat : public Animal ter class Dog : public Animal)
potem pa imamo pointerje tipa Animal (torej Animal *), ki ju uporabljamo zato, da kažeta na objekt Dog oz. Cat.
Zanima me, ali lahko iz pointerja Animal kako razberemo na kakšen objekt kaže?
Ena varianta je dati v objekt animal neki int, s katerim pač ločiš Dog od Cat, vendar me zanima ali obstaja kakšen boljši način.
- spremenilo: snow ()
KaRkY ::
Mislim da bi šlo tudi če bi v animal razred dal neko virtual funkcijo recimo getClass(ja iz jave je to) ki ti vrne tip razreda potem bi pa v vsakem podrazredu preobloživ to funkcijo.
darkkk ::
Sentinel je zmagal :P
Pač neka dinamična podatkovna struktura(dvojiško drevo), pri katerem so listi malo drugačni od notranjih vozlišč.
Saj drugače zadeva ni preveč komplicirana in bi, kot sem že napisal, lahko določal tip classa z nekim intom pa funkcijo. Ali pa mogoče z primerjavo nekega pointerja in pointerja this.
Pač neka dinamična podatkovna struktura(dvojiško drevo), pri katerem so listi malo drugačni od notranjih vozlišč.
Saj drugače zadeva ni preveč komplicirana in bi, kot sem že napisal, lahko določal tip classa z nekim intom pa funkcijo. Ali pa mogoče z primerjavo nekega pointerja in pointerja this.
Matako ::
V primeru, da te zanima za *konkretno* kateri *podrazred* gre (recimo, da objekt ni instanca Cat, ker je to poseben primer lahko uporabiš dokaj učinkovit RTTI dynamic_cast:
if (!dynamic_cast<Cat>(animal)) foo("notacat");
if (!dynamic_cast<Cat>(animal)) foo("notacat");
/\/\.K.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | "Dinamicna" sprememba razreda v C++Oddelek: Programiranje | 1924 (1316) | Spura |
» | [JavaScript] ObjectsOddelek: Programiranje | 2760 (2222) | noraguta |
» | [Java] CastanjeOddelek: Programiranje | 1531 (1386) | fiction |
» | C# je mozna referenca do int izven funkcije (direkt v classu torej)Oddelek: Programiranje | 1608 (1422) | TopCat |
» | osnove v Javi - zvezdiceOddelek: Programiranje | 3542 (2764) | Tutankhamun |