Posted By: medvidek (Zase za polarnim kruhem) on 'CZprogram'
Title: C++ - jak se zbavit pretypovani
Date: Mon Oct 8 13:25:24 2001
Zdravim vsechny C++kare.
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