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

Search the boards