Avatar billede jacobve Nybegynder
15. april 2002 - 14:13 Der er 6 kommentarer og
1 løsning

hvad er mit object instans af?

Jeg er forholdsvis nu i c++ og løbet ind i et problem jeg tror er rimlig enkelt.

Jeg har et arvehierarki der se således ud?
Skabning<-Spiller
Skabning<-Vaesen<-(Kaempe, Orc, osv. osv)

Jeg laver herefter instanser således.
Skabning *a = new Spiller();
Skabning *b = new Kaempe();
Så jeg kan lave noget polimorfi noget.

Disse instanser af objekter placere jeg så i en:
vector<Skabning*> c;
Med:
c.push_back(a);
c.push_back(b);

Spørgsmålet:
Ved et gennemløb af denne vector vil jeg gerne kunne få afvide hvilken klasse fx. a er lavet af (nemlig spiller)
og hvad b er lavet af(nemlig Kæmpe).

her stopper min c++ viden i midlertid.

Jeg kan dog give et hint og sige at i Java kan man bruge 'instans of' og få true/false... findes der noget lignende i C++?

Avatar billede wisen Nybegynder
15. april 2002 - 14:22 #1
Du kan, i Visual C++, bruge følgende:

Spiller* pSpiller = dynamic_cast<Spiller*>(c.front());
if( pSpiller )
{
// Den første i vectoren er en "Spiller"
}
else
{
// Den første i vectoren er IKKE en "Spiller"
}
Avatar billede jacobve Nybegynder
15. april 2002 - 14:30 #2
Det er præcist det jeg søger... tester det lige lidt senere og melder tilbage.
Avatar billede laffe Nybegynder
15. april 2002 - 22:03 #3
Der er ikke elegant at Typecaste sig frem til klasse-type. I dit eksempel kan det godt bruges, da du kun har få nedarvninger, med hvad hvis du f.eks havde 50-eller 100 forskellige "skabninger".

1. Du burde bygge dine klasser op på en sådan måde, at du er ligeglad med hvilken slags skabning de er. 

2. Hvis du alligevel gerne vil kunne spørge på hvilken slags skabning en vilkårlig instance er, så burde du implementere en virtual funktion der returnerer denne opslyning.
Avatar billede jacobve Nybegynder
16. april 2002 - 07:21 #4
laffe >> hmmm.. du siger noget.

Men hvordan ville du bygge det op? lade den returnere en string med samme tekst som Klassen hedder?

Nå, jeg har i midlertid brugt wisens foreslag, så det er ham der får pointene.
Så fandt jeg også ud af hvordan jeg lavede typecast i c++ :-)
Avatar billede laffe Nybegynder
16. april 2002 - 07:37 #5
I hvilken sammenhæng har du brug for at vide hvilken klasse pSpiller er ?.
Avatar billede wisen Nybegynder
16. april 2002 - 09:10 #6
Takker for point :)
Avatar billede javanic Nybegynder
21. april 2004 - 10:34 #7
lytter lige med
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester