#include <iostream>
using namespace std;
class Interface {
public:
virtual int interf1(int a) = 0;
virtual int interf2(char c) = 0;
};
class Implement1 : virtual public Interface {
public:
int interf1(int a){
std::cout << a << a << std::endl;
return 0;
}
};
class Inplement2 : virtual public Interface {
public:
int interf2(char c){
std::cout << c << c << c << std::endl;
return 0;
}
};
class Test : public Implement1, public Inplement2 {
};
int main() {
Test t;
// static usage:
t.interf1(42);
t.interf2('x');
// polymorphic usage via interface:
Interface *i = &t;
i->interf1(42);
i->interf2('x');
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgSW50ZXJmYWNlIHsKcHVibGljOgogICAgdmlydHVhbCBpbnQgaW50ZXJmMShpbnQgYSkgPSAwOwogICAgdmlydHVhbCBpbnQgaW50ZXJmMihjaGFyIGMpID0gMDsKfTsKCgpjbGFzcyBJbXBsZW1lbnQxIDogdmlydHVhbCBwdWJsaWMgSW50ZXJmYWNlIHsKcHVibGljOgogICAgaW50IGludGVyZjEoaW50IGEpewogICAgICAgIHN0ZDo6Y291dCA8PCBhIDw8IGEgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiAwOwogICAgfQp9OwoKY2xhc3MgSW5wbGVtZW50MiA6IHZpcnR1YWwgcHVibGljIEludGVyZmFjZSB7CnB1YmxpYzoKICAgIGludCBpbnRlcmYyKGNoYXIgYyl7CiAgICAgICAgc3RkOjpjb3V0IDw8IGMgPDwgYyA8PCBjIDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm4gMDsKICAgIH0KfTsKCmNsYXNzIFRlc3QgOiBwdWJsaWMgSW1wbGVtZW50MSwgcHVibGljIElucGxlbWVudDIgewoKfTsKCgppbnQgbWFpbigpIHsKCVRlc3QgdDsKCQoJLy8gc3RhdGljIHVzYWdlOgoJdC5pbnRlcmYxKDQyKTsKCXQuaW50ZXJmMigneCcpOwoJCgkvLyBwb2x5bW9ycGhpYyB1c2FnZSB2aWEgaW50ZXJmYWNlOgoJSW50ZXJmYWNlICppID0gJnQ7CglpLT5pbnRlcmYxKDQyKTsKCWktPmludGVyZjIoJ3gnKTsKCQoJcmV0dXJuIDA7Cn0=