#include <iostream>
using namespace std;
class IJob
{
public:
virtual void job() = 0;
};
class P { };
class A : public P, public IJob
{
public:
void ab() { cout << "ab()" << endl; }
virtual void job() { ab(); };
};
class C : public P, public IJob
{
public:
void cd() { cout << "cd()" << endl; }
virtual void job() { cd(); };
};
int main()
{
IJob *p = new A;
p->job();
delete p;
p = new C;
p->job();
delete p;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgSUpvYgp7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBqb2IoKSA9IDA7Cn07CgpjbGFzcyBQIHsgfTsKCmNsYXNzIEEgOiBwdWJsaWMgUCwgcHVibGljIElKb2IKewpwdWJsaWM6CiAgICB2b2lkIGFiKCkgeyBjb3V0IDw8ICJhYigpIiA8PCBlbmRsOyB9CiAgICB2aXJ0dWFsIHZvaWQgam9iKCkgeyBhYigpOyB9Owp9OwoKY2xhc3MgQyA6IHB1YmxpYyBQLCBwdWJsaWMgSUpvYgp7CnB1YmxpYzoKICAgIHZvaWQgY2QoKSB7IGNvdXQgPDwgImNkKCkiIDw8IGVuZGw7IH0KICAgIHZpcnR1YWwgdm9pZCBqb2IoKSB7IGNkKCk7IH07Cn07CgppbnQgbWFpbigpCnsKICAgIElKb2IgKnAgPSBuZXcgQTsKICAgIHAtPmpvYigpOwogICAgZGVsZXRlIHA7CgogICAgcCA9IG5ldyBDOwogICAgcC0+am9iKCk7CiAgICBkZWxldGUgcDsKCiAgICByZXR1cm4gMDsKfQ==