#include "iostream"
class Logger {
public:
Logger(std::string name) : name_(name) {}
void log(std::string msg) { std::cout << name_ << ": " << msg << std::endl; }
private:
std::string name_;
};
class B {
public:
B() : logger_("Class B" ) {}
void doSomethingInB() {
logger_.log("B doing something");
}
private:
Logger logger_;
};
class C : public B {
public:
C() : logger_("Class C" ) {}
void doSomethingInC() {
logger_.log("C doing something");
}
private:
Logger logger_;
};
int main()
{
B* b = new B();
C* c = new C();
b->doSomethingInB();
c->doSomethingInC();
c->doSomethingInB();
return 0;
}
I2luY2x1ZGUgImlvc3RyZWFtIgoKY2xhc3MgTG9nZ2VyIHsKcHVibGljOgogICAgTG9nZ2VyKHN0ZDo6c3RyaW5nIG5hbWUpIDogbmFtZV8obmFtZSkge30KICAgIHZvaWQgbG9nKHN0ZDo6c3RyaW5nIG1zZykgeyBzdGQ6OmNvdXQgPDwgbmFtZV8gPDwgIjogIiA8PCBtc2cgPDwgc3RkOjplbmRsOyB9CnByaXZhdGU6CiAgICBzdGQ6OnN0cmluZyBuYW1lXzsKfTsKCmNsYXNzIEIgewpwdWJsaWM6CiAgICBCKCkgOiBsb2dnZXJfKCJDbGFzcyBCIiApIHt9CiAgICB2b2lkIGRvU29tZXRoaW5nSW5CKCkgewogICAgICAgIGxvZ2dlcl8ubG9nKCJCIGRvaW5nIHNvbWV0aGluZyIpOwogICAgfQpwcml2YXRlOgogIExvZ2dlciBsb2dnZXJfOwp9OwoKY2xhc3MgQyA6IHB1YmxpYyBCIHsKcHVibGljOgogICAgQygpIDogbG9nZ2VyXygiQ2xhc3MgQyIgKSB7fQogICAgdm9pZCBkb1NvbWV0aGluZ0luQygpIHsKICAgICAgICBsb2dnZXJfLmxvZygiQyBkb2luZyBzb21ldGhpbmciKTsKICAgIH0KcHJpdmF0ZToKICBMb2dnZXIgbG9nZ2VyXzsKfTsKCmludCBtYWluKCkKewogICAgQiogYiA9IG5ldyBCKCk7CiAgICBDKiBjID0gbmV3IEMoKTsKCiAgICBiLT5kb1NvbWV0aGluZ0luQigpOwoKICAgIGMtPmRvU29tZXRoaW5nSW5DKCk7CiAgICBjLT5kb1NvbWV0aGluZ0luQigpOwoKICAgIHJldHVybiAwOwp9