#include <iostream>
class A {
public:
A(){ std::cout << "A()\n"; }
A(const A& a){ std::cout << "A(const A&)\n"; }
~A(){ std::cout << "~A()\n"; }
void foo(){ std::cout << "A::foo()\n"; }
};
class B : public A {
public:
B(){ std::cout << "B()\n"; }
B(const B& b){ std::cout << "B(const B&)\n"; }
B& operator=(const B& b){ std::cout << "B::operator=(const B&)\n"; return *this; }
~B(){ std::cout << "~B()\n"; }
virtual void foo(){ std::cout << "B::foo()\n"; }
};
class C : public B {
public:
C(){ std::cout << "C()\n"; }
C& operator=(const C& c){ std::cout << "C::operator=(const C&)\n"; a_=c.a_; return *this; }
~C(){ std::cout << "~C()\n"; }
void foo(){ std::cout << "C::foo()\n"; }
protected:
A a_;
};
int main()
{
std::cout << "\tC c1:\n";
C c1;
std::cout << "\n\n\tC c2(c1);\n";
C c2(c1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQSB7CnB1YmxpYzoKICAgIEEoKXsgc3RkOjpjb3V0IDw8ICJBKClcbiI7IH0KICAgIEEoY29uc3QgQSYgYSl7IHN0ZDo6Y291dCA8PCAiQShjb25zdCBBJilcbiI7IH0KICAgIH5BKCl7IHN0ZDo6Y291dCA8PCAifkEoKVxuIjsgfQogICAgdm9pZCBmb28oKXsgc3RkOjpjb3V0IDw8ICJBOjpmb28oKVxuIjsgfQp9OwoKY2xhc3MgQiA6IHB1YmxpYyBBIHsKcHVibGljOgogICAgQigpeyBzdGQ6OmNvdXQgPDwgIkIoKVxuIjsgfQogICAgQihjb25zdCBCJiBiKXsgc3RkOjpjb3V0IDw8ICJCKGNvbnN0IEImKVxuIjsgfQogICAgQiYgb3BlcmF0b3I9KGNvbnN0IEImIGIpeyBzdGQ6OmNvdXQgPDwgIkI6Om9wZXJhdG9yPShjb25zdCBCJilcbiI7IHJldHVybiAqdGhpczsgfQogICAgfkIoKXsgc3RkOjpjb3V0IDw8ICJ+QigpXG4iOyB9CiAgICB2aXJ0dWFsIHZvaWQgZm9vKCl7IHN0ZDo6Y291dCA8PCAiQjo6Zm9vKClcbiI7IH0KfTsKCmNsYXNzIEMgOiBwdWJsaWMgQiB7CnB1YmxpYzoKICAgIEMoKXsgc3RkOjpjb3V0IDw8ICJDKClcbiI7IH0KICAgIEMmIG9wZXJhdG9yPShjb25zdCBDJiBjKXsgc3RkOjpjb3V0IDw8ICJDOjpvcGVyYXRvcj0oY29uc3QgQyYpXG4iOyBhXz1jLmFfOyByZXR1cm4gKnRoaXM7IH0KICAgIH5DKCl7IHN0ZDo6Y291dCA8PCAifkMoKVxuIjsgfQogICAgdm9pZCBmb28oKXsgc3RkOjpjb3V0IDw8ICJDOjpmb28oKVxuIjsgIH0KcHJvdGVjdGVkOgogICAgQSBhXzsKfTsKCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8ICJcdEMgYzE6XG4iOwogICAgQyBjMTsKCiAgICBzdGQ6OmNvdXQgPDwgIlxuXG5cdEMgYzIoYzEpO1xuIjsKICAgIEMgYzIoYzEpOwoKICAgIHJldHVybiAwOwp9Cg==