1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| class CORBase
{
public:
CORBase(CORBase* n):n(n){}
virtual ~CORBase(){}
virtual void traverse(BaseClass* b)
{
if(n)
n->traverse(b);
}
private:
CORBase* n;
}
class Derived1 : public CORBase
{
public:
Derived1(CORBase* n):CORBase(n){}
virtual ~Derived1(){}
virtual void traverse(BaseClass* b)
{
ClasseFille< type>* modif = dynamic_cast< ClasseFille<type>* >(b);
if(!modif)
base::traverse(b);
else
modif->methodePropre(/* arguments éventuels */);
}
}
class Derived2 : public CORBase
{
public:
Derived2(CORBase* n):CORBase(n){}
virtual ~Derived2(){}
virtual void traverse(BaseClass* b)
{
AutreClasseFille< type>* modif =
dynamic_cast< AutreClasseFille<type>* >(b);
if(!modif)
base::traverse(b);
else
modif->methodePropre(/* arguments éventuels */);
}
}
/* autant de DerivedN que nécessaire */ |