#include <iostream>
class A
{
int& r_;
public:
A(int& v) : r_(v) {}
int& get() { return r_; }
void operator=(const A& a)
{
new(this)A(a.r_);
}
};
class B : public A
{
char c_;
public:
B(int& v, char c) : A(v), c_(c) {}
char getch() const { return c_; }
void operator=(const B& b)
{
A::operator=((A&)b);
c_ = b.c_;
}
};
void test()
{
int x = 10;
int y = 20;
B d(x,'#');
B e(y, '!');
d = e;
++y;
std::cout << "x=" << x << "\n"
<< "y=" << y << "\n";
std::cout << "d.get()=" << d.get()
<< ", d.getch()=" << d.getch() << "\n"
<< "e.get()=" << e.get()
<< ", e.getch()=" << e.getch() << "\n";
}
int main(int argc, char *argv[])
{
test();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQQp7CiAgIGludCYgcl87CnB1YmxpYzoKICAgQShpbnQmIHYpIDogcl8odikge30KICAgaW50JiBnZXQoKSB7IHJldHVybiByXzsgfQogICB2b2lkIG9wZXJhdG9yPShjb25zdCBBJiBhKQogICB7CiAgICAgIG5ldyh0aGlzKUEoYS5yXyk7CiAgIH0KfTsKCmNsYXNzIEIgOiBwdWJsaWMgQQp7CiAgIGNoYXIgY187CnB1YmxpYzoKICAgQihpbnQmIHYsIGNoYXIgYykgOiBBKHYpLCBjXyhjKSB7fQogICBjaGFyIGdldGNoKCkgY29uc3QgeyByZXR1cm4gY187IH0KICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQiYgYikKICAgewogICAgICBBOjpvcGVyYXRvcj0oKEEmKWIpOwogICAgICBjXyA9IGIuY187CiAgIH0KfTsKCnZvaWQgdGVzdCgpCnsKICAgaW50IHggPSAxMDsKICAgaW50IHkgPSAyMDsKICAgQiBkKHgsJyMnKTsKICAgQiBlKHksICchJyk7CiAgIGQgPSBlOwogICArK3k7CiAgIHN0ZDo6Y291dCA8PCAieD0iIDw8IHggPDwgIlxuIgogICAgICAgICAgICAgPDwgInk9IiA8PCB5IDw8ICJcbiI7CiAgIHN0ZDo6Y291dCA8PCAiZC5nZXQoKT0iIDw8IGQuZ2V0KCkKICAgICA8PCAiLCBkLmdldGNoKCk9IiA8PCBkLmdldGNoKCkgPDwgIlxuIgogICAgIDw8ICJlLmdldCgpPSIgPDwgZS5nZXQoKQogICAgIDw8ICIsIGUuZ2V0Y2goKT0iIDw8IGUuZ2V0Y2goKSA8PCAiXG4iOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgIHRlc3QoKTsKICAgcmV0dXJuIDA7Cn0K