#include <iostream>

struct base {
   double x;

   virtual void f( ) {
      std::cout << "en base::f\n";
   }
};

struct derivado : base {
   double y;

   void f( ) {
      std::cout << "en derivado::f\n";
   }
};

int main( ) {
   std::cout << "tamaño en bytes de base y derivado: " << sizeof(base) << " " << sizeof(derivado) << "\n\n";

   base b;
   b.f( );        // b es de tipo base, se llamará a la función correcta
   derivado d;
   d.f( );        // d es de tipo derivado, se llamará a la función correcta
   base& r = d;
   r.f( );        // r hace referencia a un objeto de tipo derivado y el mecanismo virtual logrará que se llame a la f de derivado
}
