#include <iostream>
class A
{
int a;
protected:
explicit A(int x): a(x) { std::cout << "A::A(int)" << std::endl; }
public:
A(): a(0) { std::cout << "A::A()" << std::endl; }
A(const A ©): a(copy.a) { std::cout << "A::A(const A&)" << std::endl; }
int data() const { return a; }
};
class B: public A
{
int b;
public:
B(): A(1), b(123) {}
int get() const { return b; }
};
class C: public A
{
int c;
public:
C(): A(2), c(321) {}
int get() const { return c; }
};
int main()
{
B b;
C c;
static_cast<A&>(b) = c;
std::cout << b.data() << '\t' << b.get() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQQp7CiAgICBpbnQgYTsKCnByb3RlY3RlZDoKICAgIGV4cGxpY2l0IEEoaW50IHgpOiBhKHgpICAgICB7IHN0ZDo6Y291dCA8PCAiQTo6QShpbnQpIiAgICAgIDw8IHN0ZDo6ZW5kbDsgfQogICAgCnB1YmxpYzoKICAgIEEoKTogYSgwKSAgICAgICAgICAgICAgICAgICB7IHN0ZDo6Y291dCA8PCAiQTo6QSgpIiAgICAgICAgIDw8IHN0ZDo6ZW5kbDsgfQogICAgQShjb25zdCBBICZjb3B5KTogYShjb3B5LmEpIHsgc3RkOjpjb3V0IDw8ICJBOjpBKGNvbnN0IEEmKSIgPDwgc3RkOjplbmRsOyB9CiAgICAKICAgIGludCBkYXRhKCkgY29uc3QgICAgICAgICAgICB7IHJldHVybiBhOyB9Cn07CiAKY2xhc3MgQjogcHVibGljIEEKewogICAgaW50IGI7CnB1YmxpYzoKICAgIEIoKTogQSgxKSwgYigxMjMpIHt9CiAgICBpbnQgZ2V0KCkgY29uc3QgICB7IHJldHVybiBiOyB9Cn07CiAKY2xhc3MgQzogcHVibGljIEEKewogICAgaW50IGM7CnB1YmxpYzoKICAgIEMoKTogQSgyKSwgYygzMjEpIHt9CiAgICBpbnQgZ2V0KCkgY29uc3QgICB7IHJldHVybiBjOyB9Cn07CiAKaW50IG1haW4oKQp7CiAgICBCIGI7CiAgICBDIGM7CiAgICAKICAgIHN0YXRpY19jYXN0PEEmPihiKSA9IGM7CiAgICBzdGQ6OmNvdXQgPDwgYi5kYXRhKCkgPDwgJ1x0JyA8PCBiLmdldCgpIDw8IHN0ZDo6ZW5kbDsKfQo=