Posted By: medvidek (Zase za polarnim kruhem) on 'CZprogram'
Title: Re: C++ - jak se zbavit pretypovani
Date: Tue Oct 9 15:58:23 2001
> >
> > Predek muze hodne zjednodusene vypadat treba takto:
> >
> > class Base {
> > public:
> > Base* parent; // ukazatel na rodice
> > // definice spolecnych vlastnosti pro vsechny uzly
> > }
> >
> > Potom nejaky realny uzel muze vypadat treba takto:
> >
> > class Node : public Base {
> > int data; // nejaka data
> > int f(); // nejaka nove pridana funkce
> > }
> >
> > udelam instanci a zavolam funkci f():
> > Node n;
> > n.f();
> >
> > to jde bez problemu, ale uz nezavolam funkci f() pro rodice :(
>
> > n.parent->f();
>
> To je snad __JASNY__ ne ? Jak chces zavolat 'f' pro kdyz 'base' ji nema
> definovanou ?
No a to je prave to :) Ja chapu, proc to nejde a ptam se, jak to zaridit, aby
parent melo typ toho realneho uzlu, ne te bazove tridy (pripadne aby funkce
parent()) vracela pointer na tu aktualni tridu a abych nemusel do kazdeho
potomka psat
typ_potomka* par() {return (typ_potomka) parent;}
Chtel bych, aby se toto udelalo automaticky (neco jako pouzit typeid, aby to
vratilo typ potomka, ackoliv je to definovano v predku). Ja vim, ze to zni
silene...
> Jediny cisty reseni (jesli te dobre chapu - estli ne omlouvam
> se) je
>
> class Base {
> virtual void f();
> }
>
> popripade jeste =0
To je pravda, ale ja vubec netusim, co ti potomci budou mit za funkce. To co
rikas je ale samozrejme pravda.
> Takze bud si totalne ulitnul, nebo jsem blbej ja a nepochopil se te :)
No comment :)
> Pivson I a posledni, z bozi vule pivar
medvidek
--
ELVIRA - Extended LSD VoiceXML interpreter for Applications
http://www.fi.muni.cz/lsd/elvira
Engine for building dialog applications Free for noncommercial use