[C++]Pristupovani k atributum potomka pres pole typu rodice

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Hollowback 22. 11. 2008 15:41

Zdraim,
mam v c++ vytvorene 3 tridy
Kód: Vybrat vše
class Item{...};
class File : public Item{...};
class Folder : public Item{...};

Vytvorim nejake pole Item *pole[5]; a vlozim do neho postupne objekty typu File a Folder.
ve tride Item mam promennou type, takze poznam, jestli to je File nebo Folder. Jenom potrebuju vedet, jestli je nejaka moznost, jak pristupovat k metodam/atributum jednotlivych potomku.
Napr.:
pole[0] bude Folder (Folder bude mit treba atribut pocetSouboru), a ted nevim jak mam z pole[0] zjistit ten pocetSouboru. Folder *tmp = pole[0] bohuzel nefunguje :).
Nevite nekdo jak to vyresit? Nebo da se to vubec nejak vyresit ? :)
Athlon 64 X2 3600+, Gigabyte MA78GM-S2H, 2 GB AData DDR2 800MHz, 120GB Seagate 7200rpm, 250GB IBM Fedora 7
For Those About To Rock
WE SALUTE YOU!!!
Hollowback
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod beertje 22. 11. 2008 16:04

Kód: Vybrat vše
Folder *tmp = (Folder*) pole[0]

Před tímto kódem je ovšem třeba otestovat, zda pole[0] je skutečně ukazatel typu Folder...
beertje
Junior

Odeslat příspěvekod Hollowback 22. 11. 2008 16:13

jj.... diky
Athlon 64 X2 3600+, Gigabyte MA78GM-S2H, 2 GB AData DDR2 800MHz, 120GB Seagate 7200rpm, 250GB IBM Fedora 7
For Those About To Rock
WE SALUTE YOU!!!
Hollowback
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod ondrad 22. 11. 2008 16:43

lépe takto:

Kód: Vybrat vše
Folder *tmp = dynamic_cast<Folder*> (pole[0]);
ondrad
Junior

Odeslat příspěvekod Hollowback 22. 11. 2008 22:35

diky za odpovedi, jeste bych potreboval pomoc s funkci strtok. Mam takovy kod:
Kód: Vybrat vše
   char *name = "/test/test1";
char *split;
split = strtok (name,"/");
while (split != NULL)
{
        ...//nejaky kod, ktery pracuje s promennou split
   split = strtok (NULL, "/");
}

Kdyz to spustim, tak mi to hnedka spadne :). V debugu se mi do promenne split na radku split = strtok(NULL, "/"); vlozi 0x00000000 <Bad Ptr> pri naslednem porovnavani (split != NULL) to spadne...Ve splitu je v prvnim volani strtok (pred cyklem) spravne vlozen text "test".
Athlon 64 X2 3600+, Gigabyte MA78GM-S2H, 2 GB AData DDR2 800MHz, 120GB Seagate 7200rpm, 250GB IBM Fedora 7
For Those About To Rock
WE SALUTE YOU!!!
Hollowback
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod wizpal 22. 11. 2008 23:07

No ani se nedivím, že to padá :-)), nechť vysvětlují jiní > http://www.cplusplus.com/reference/clib ... trtok.html

EDIT::

nebo jinak pokud si pán přeje, každopádně musíš mít alokovanou paměť pro ten string.

char *str;
str = (char*) malloc(30);
strcpy(str, "- This, a sample string.");
Keep It Simple, Stupid!
wizpal
Junior
Uživatelský avatar

Odeslat příspěvekod Hollowback 23. 11. 2008 11:02

diky..presne to jsem potreboval :)
Athlon 64 X2 3600+, Gigabyte MA78GM-S2H, 2 GB AData DDR2 800MHz, 120GB Seagate 7200rpm, 250GB IBM Fedora 7
For Those About To Rock
WE SALUTE YOU!!!
Hollowback
Mírně pokročilý
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků