#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;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgY2xhc3MgQmFzZXsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgdmZ1bmMoKSB7IHB1dHMoIkJhc2U6OnZmdW5jKCkiKTsgfQogICAgfTsKICAgIGNsYXNzIERlcml2ZWQ6IHB1YmxpYyBCYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIHZmdW5jKCkgeyBwdXRzKCJEZXJpdmVkOjp2ZnVuYygpIik7IH0KICAgIH07CiAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CgogICAgaW50IG1haW4oKQogICAgewogICAgICAgIERlcml2ZWQgZDsKICAgICAgICBCYXNlIGJfYXNzaWduID0gZDsKICAgICAgICBCYXNlIGJfbWVtY3B5OwogICAgICAgIG1lbWNweSgmYl9tZW1jcHksICZkLCBzaXplb2YoQmFzZSkpOwoKICAgICAgICBiX2Fzc2lnbi52ZnVuYygpOwogICAgICAgIGJfbWVtY3B5LnZmdW5jKCk7CgogICAgICAgIHByaW50Zigic2l6ZW9mIEJhc2UgOiAlZFxuIiwgc2l6ZW9mKEJhc2UpKTsKCiAgICAgICAgQmFzZSAmYl9yZWYgPSBkOwogICAgICAgIGJfcmVmLnZmdW5jKCk7CiAgICAgICAgCiAgICAgICAgcHJpbnRmKCJiX2Fzc2lnbjogJXg7IGJfbWVtY3B5OiAleDsgYl9yZWY6ICV4XG4iLCAKICAgICAgICAgICAgKihpbnQgKikmYl9hc3NpZ24sCiAgICAgICAgICAgICooaW50ICopJmJfbWVtY3B5LAogICAgICAgICAgICAqKGludCAqKSZiX3JlZik7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cg==