Posted By: TopGun (ICQ#: 60779546) on 'CZprogram'
Title: Re: C++ - jak se zbavit pretypovani
Date: Mon Oct 8 14:01:46 2001
> Zdravim vsechny C++kare.
>
Ani ja nemam idealne riesenie, ale nie je velka praca dat do triedy Node
funkciu:
Node *Parent() {
return (Node*)parent;
}
> Mam tridu, ktera ma slouzit jako uzel stromu. Potrebuju, aby kazdy uzel
> stromu mel urcite vlastnosti -> vytvorim predka, od ktereho musi kazdy
> realny
> uzel stromu podedit.
>
> 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();
>
> Musel bych volat:
>
> ((Node*)(n.parent))->f();
>
> Mozna by slo usetrit nejake zavorky a lepsi je asi pouzivat dynamic_cast,
> ale
> to neni podstatne. Ja se chci zbavit toho pretypovani, protoze potrebuju
> funkce rodice a sourozencu volat casto.
>
> Co s tim?
>
> Vymyslel jsem jedno reseni, ale je takove drsne... chtel bych neco lepsiho.
> To
> moje asi neni moc kompatibilni. Zde je to reseni.
>
> template <class T> class Base {
> public:
> T* parent; // ukazatel na rodice
> // definice spolecnych vlastnosti pro vsechny uzly
> }
>
> class Node : public Base<Node> {
> int data; // nejaka data
> int f(); // nejaka nove pridana funkce
> }
>
> Ted muzu klidne zavolat n.parent->f();
>
>
> medvidek
>
> --
> ELVIRA - Extended LSD VoiceXML interpreter for Applications
> http://www.fi.muni.cz/lsd/elvira
> Engine for building dialog applications Free for noncommercial use
http://xrs.winradio.com http://www.rbasic.com
http://xrs.winradio.com/plugins.htm mailto:stofa@eshs-lab.com
TopGun (Are you ready to fly ?)