    #include <stdio.h>
    class Base{
    public:
        virtual void vfunc() { puts("Base::vfunc()"); }
    };
    class Derived: public Base
    {
    public:
        virtual void vfunc() { puts("Derived::vfunc()"); }
    };
    #include <string.h>

    int main()
    {
        Derived d;
        Base b_assign = d;
        Base b_memcpy;
        memcpy(&b_memcpy, &d, sizeof(Base));

        b_assign.vfunc();
        b_memcpy.vfunc();

        printf("sizeof Base : %d\n", sizeof(Base));

        Base &b_ref = d;
        b_ref.vfunc();
        
        printf("b_assign: %x; b_memcpy: %x; b_ref: %x\n", 
            *(int *)&b_assign,
            *(int *)&b_memcpy,
            *(int *)&b_ref);
        return 0;
    }
