Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: digimikeh en 15 Noviembre 2020, 02:03 AM

Título: herencia : funcion virtual no se ejecuta..
Publicado por: digimikeh en 15 Noviembre 2020, 02:03 AM
Hola amigos..
Que pasa en este codigo que la funcion virtual do_xy() en x no se está ejecutando?

Código (cpp) [Seleccionar]

#include <iostream>

struct x{ 
  x(){}
  ~x(){}
 
protected:
  virtual void do_xy(){
      cout << "from x " << endl;     //esto no se ejecuta
  } 
};

struct y : public x{
  y(){}
  ~y(){}
 
public:
  void do_xy() override{
      cout << "from y " << endl;     //esto se ejecuta
  }   
};

int main(){
    y _y;
    _y.do_xy();
   
    cin.get();
    return 0;
}


Saludos.. gracias.
Título: Re: herencia : funcion virtual no se ejecuta..
Publicado por: K-YreX en 15 Noviembre 2020, 02:31 AM
Claro.

En este caso en concreto no se ejecuta por 2 motivos:
Título: Re: herencia : funcion virtual no se ejecuta..
Publicado por: digimikeh en 15 Noviembre 2020, 02:38 AM
Entiendo, gracias..

La idea mia es que se ejecute en cadena.. como un ensamble, es decir, la linea

Código (cpp) [Seleccionar]

_y.do_xy();


deberia ejecutar:
from x
from y


por esta razon utilice el keyword "override"...
Título: Re: herencia : funcion virtual no se ejecuta..
Publicado por: K-YreX en 15 Noviembre 2020, 02:52 AM
Para llamar a la función de la clase base tienes que usar ::.
Código (cpp) [Seleccionar]

struct Base {
  virtual void show(){
    cout << "Base" << endl;
  }
};

struct Derived : Base {
  void show(){
    Base::show();
    cout << "Derived" << endl;
  }
};

int main(){
  Derived d;
  Base *p = &d;
  p->show();
}


SALIDA:

Base
Derived
Título: Re: herencia : funcion virtual no se ejecuta..
Publicado por: digimikeh en 15 Noviembre 2020, 03:01 AM
perfect!!!... muchas gracias