#include <iostream>
using namespace std;
class Base{
public:
Base(){};
virtual ~Base() {};
virtual void foomethod()=0; //Marked as pure virtual
};
class A : public Base{
public:
A(){}; //Ctor
virtual ~A(){}; //Dtor
void foomethod(){ cout << "Hello from A"; }
};
class B : public Base{
public:
B(){}; //Ctor
virtual ~B(){}; //Dtor
void foomethod(){ /* DO SOMETHING */ }
};
int main() {
// Base obj; // Can't do that
Base *obj = new A();
obj->foomethod(); // A's one
delete obj;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQmFzZXsKcHVibGljOgogICBCYXNlKCl7fTsKICAgdmlydHVhbCB+QmFzZSgpIHt9OwogICB2aXJ0dWFsIHZvaWQgZm9vbWV0aG9kKCk9MDsgLy9NYXJrZWQgYXMgcHVyZSB2aXJ0dWFsCn07CgpjbGFzcyBBIDogcHVibGljIEJhc2V7CnB1YmxpYzoJCiAgIEEoKXt9OyAgLy9DdG9yCiAgIHZpcnR1YWwgfkEoKXt9OyAvL0R0b3IKICAgdm9pZCBmb29tZXRob2QoKXsgY291dCA8PCAiSGVsbG8gZnJvbSBBIjsgfQp9OwpjbGFzcyBCIDogcHVibGljIEJhc2V7CnB1YmxpYzoKICAgQigpe307ICAvL0N0b3IKICAgdmlydHVhbCB+Qigpe307IC8vRHRvcgogICB2b2lkIGZvb21ldGhvZCgpeyAvKiBETyBTT01FVEhJTkcgKi8gfQp9OwoKaW50IG1haW4oKSB7CgkKCS8vIEJhc2Ugb2JqOyAvLyBDYW4ndCBkbyB0aGF0CglCYXNlICpvYmogPSBuZXcgQSgpOwoJb2JqLT5mb29tZXRob2QoKTsgLy8gQSdzIG9uZQoJZGVsZXRlIG9iajsKCQogICAgcmV0dXJuIDA7Cn0=