» »

[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.
  • spremenilo: snow ()

Senitel ::

RTTI (RunTime Type Identification) klik.

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.

Quikee ::

Vprašanje je - za kakšen primer gre, da to rabiš vedet?

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.

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");
/\/\.K.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

"Dinamicna" sprememba razreda v C++

Oddelek: Programiranje
131924 (1316) Spura
»

[JavaScript] Objects

Oddelek: Programiranje
172760 (2222) noraguta
»

[Java] Castanje

Oddelek: Programiranje
91531 (1386) fiction
»

C# je mozna referenca do int izven funkcije (direkt v classu torej)

Oddelek: Programiranje
81608 (1422) TopCat
»

osnove v Javi - zvezdice

Oddelek: Programiranje
403542 (2764) Tutankhamun

Več podobnih tem