#include <iostream>

struct base {
   double x;

   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, ¡pero no lo sabe! llamará a la f del tipo base
}
