#include <iostream>
using namespace std;
class Weapon
{
public:
virtual void features()
{ cout << "Loading weapon features.\n"; }
};
class Bomb : public Weapon
{
public:
void features()
{ cout << "Loading bomb features.\n"; }
};
class Gun : public Weapon
{
public:
void features()
{ cout << "Loading gun features.\n"; }
};
class Loader
{
public:
void loadFeatures(Weapon *weapon)
{
weapon->features();
}
};
class A {public: virtual int func(){cout<<"In A";};};
class B: virtual public A {};
class C: virtual public A {};
class D: virtual public C {public: virtual int func(){cout<<"In D";};};
class E: public B, public D {};
int main()
{
E *e = new E();
e->func();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgV2VhcG9uCnsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB2b2lkIGZlYXR1cmVzKCkKICAgICAgICAgeyBjb3V0IDw8ICJMb2FkaW5nIHdlYXBvbiBmZWF0dXJlcy5cbiI7IH0KfTsKCmNsYXNzIEJvbWIgOiBwdWJsaWMgV2VhcG9uCnsKICAgIHB1YmxpYzoKICAgICAgIHZvaWQgZmVhdHVyZXMoKQogICAgICAgICB7IGNvdXQgPDwgIkxvYWRpbmcgYm9tYiBmZWF0dXJlcy5cbiI7IH0KfTsKCmNsYXNzIEd1biA6IHB1YmxpYyBXZWFwb24KewogICAgcHVibGljOgogICAgICAgdm9pZCBmZWF0dXJlcygpCiAgICAgICAgIHsgY291dCA8PCAiTG9hZGluZyBndW4gZmVhdHVyZXMuXG4iOyB9Cn07CgpjbGFzcyBMb2FkZXIKewogICBwdWJsaWM6CiAgICAgdm9pZCBsb2FkRmVhdHVyZXMoV2VhcG9uICp3ZWFwb24pCiAgICAgewogICAgICAgIHdlYXBvbi0+ZmVhdHVyZXMoKTsKICAgICB9ICAgICAKfTsKCmNsYXNzIEEge3B1YmxpYzogdmlydHVhbCBpbnQgZnVuYygpe2NvdXQ8PCJJbiBBIjt9O307CmNsYXNzIEI6IHZpcnR1YWwgcHVibGljIEEge307CmNsYXNzIEM6IHZpcnR1YWwgcHVibGljIEEge307CmNsYXNzIEQ6IHZpcnR1YWwgcHVibGljIEMge3B1YmxpYzogdmlydHVhbCBpbnQgZnVuYygpe2NvdXQ8PCJJbiBEIjt9O307CmNsYXNzIEU6IHB1YmxpYyBCLCBwdWJsaWMgRCB7fTsgCgoKaW50IG1haW4oKQp7CiAgICBFICplID0gbmV3IEUoKTsKZS0+ZnVuYygpOwoKCiAgICByZXR1cm4gMDsKfQ==