On Dec 20, 2007 12:23 AM, Leandro Lucarella <[EMAIL PROTECTED]> wrote:
> personaje, el 20 de diciembre a las 00:09 me escribiste:
> > Hola a todos,
> >
> >
> >    Tengo dos clases; A y B, ambas tienen un método igual Run(int);
> > ahora declaro C como public las dos. Cómo hago para reimplementar el
> > metodo Run para cada clase padre?
>
> No podés.
>
> > class A
> > {
> > public:
> >    A(){}
> >    virtual ~A(){}
> >    virtual void Run(int){std::cout<<"RunA"<<std::endl;}
> > };
> >
> > class B
> > {
> > public:
> >    B(){}
> >    virtual ~B(){}
> >    virtual void Run(int){std::cout<<"RunB"<<std::endl;}
> > };
> >
> > class C : public A, public B
> > {
> > public:
> >    A(){}
> >    virtual ~A(){}
>
> Supongo que esos dos son efecto de copy&paste y serian C() y ~C().
>
> >    virtual void Run(int){std::cout<<"RunC desde A"<<std::endl;}
> >    virtual void Run(int){std::cout<<"RunC desde B"<<std::endl;}
> > };
> >
> >
> > Algo así... lo miro y me digo que no se puede, pero... es posible?
>
> No. Y no tiene sentido, cuando llames a c.Run(1) a cual llama? Y si no
> llamás a los Run del padre, menos sentido le veo.

la idea es así:

A* pa;
B* pb;
C* pc = new C;

pa = pc;
pb = pc;

pa->Run(); // corre la versión A
pb->Run(); // corre la versión B



>
> > y algo similar?
>
> Lo más parecido que se me ocurre es (si querés llamar a los Run de los
> padres):
>

> Pero eso es un poco lame, porque tampoco tiene ninguna gracia que sea
> virtual el método Run en primera instancia.

si, Lame...

>
>
> Yo creo que tu principal problema no como catso te metiste en una
> situación donde tenés herencia múltiple, con 2 métodos con el mismo nombre
> en las clases padres y *encima* querés llamar a cada uno de ellos con una
> virtualidad mágica inexistente =P

tengo un template, con 2 especializaciones, y una clase que hereda de
las dos especializaciones...

Saludos

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a