#include <iostream>
using namespace std;
class A{
public:
virtual void f(){cout<<"It's A"<<endl;}
};
class B : virtual public A{
public:
void f() override {cout<<"It's B"<<endl;}
};
class C : virtual public A{
public:
void f() override {cout<<"It's C"<<endl;}
};
class D : public B,public C{
public:
void f() override {cout<<"It's D, this means:"<<endl;
B::f(); cout << "and at the same time "; C::f();
}
};
int main() {
D d;
d.f();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQXsKcHVibGljOgogIHZpcnR1YWwgdm9pZCBmKCl7Y291dDw8Ikl0J3MgQSI8PGVuZGw7fQp9OwpjbGFzcyBCIDogdmlydHVhbCBwdWJsaWMgQXsKcHVibGljOgogIHZvaWQgZigpIG92ZXJyaWRlIHtjb3V0PDwiSXQncyBCIjw8ZW5kbDt9Cn07CmNsYXNzIEMgOiB2aXJ0dWFsIHB1YmxpYyBBeyAKcHVibGljOgogIHZvaWQgZigpIG92ZXJyaWRlIHtjb3V0PDwiSXQncyBDIjw8ZW5kbDt9Cn07CmNsYXNzIEQgOiBwdWJsaWMgQixwdWJsaWMgQ3sKcHVibGljOgogIHZvaWQgZigpIG92ZXJyaWRlIHtjb3V0PDwiSXQncyBELCB0aGlzIG1lYW5zOiI8PGVuZGw7CiAgQjo6ZigpOyBjb3V0IDw8ICJhbmQgYXQgdGhlIHNhbWUgdGltZSAiOyBDOjpmKCk7CiAgfQp9OwoKaW50IG1haW4oKSB7CglEIGQ7CiAgICBkLmYoKTsKfQ==