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