#include <iostream>
using namespace std;
class Abstract {
public:
Abstract( void ) { cout << "Abstract constructor" << endl; };
virtual ~Abstract( void ) {};
void Foo( void ) { cout << "Abstract::Foo()"<< endl; };
};
class Derived: public Abstract {
public:
Derived( void ): Abstract() { cout << "Derived constructor" << endl; };
~Derived( void ) {};
void Foo( void ) { cout << "Derived::Foo()"<< endl; };
};
void Bar( Abstract& obj ) {
obj.Foo();
}
int main(void) {
Derived X;
Bar( X );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQWJzdHJhY3QgewpwdWJsaWM6CgkJCUFic3RyYWN0KCB2b2lkICkgeyBjb3V0IDw8ICJBYnN0cmFjdCBjb25zdHJ1Y3RvciIgPDwgZW5kbDsgfTsKCXZpcnR1YWwJfkFic3RyYWN0KCB2b2lkICkge307Cgl2b2lkCUZvbyggdm9pZCApIHsgY291dCA8PCAiQWJzdHJhY3Q6OkZvbygpIjw8IGVuZGw7IH07Cn07CgpjbGFzcyBEZXJpdmVkOiBwdWJsaWMgQWJzdHJhY3QgewpwdWJsaWM6CgkJCURlcml2ZWQoIHZvaWQgKTogQWJzdHJhY3QoKSB7IGNvdXQgPDwgIkRlcml2ZWQgY29uc3RydWN0b3IiIDw8IGVuZGw7IH07CgkJCX5EZXJpdmVkKCB2b2lkICkge307Cgl2b2lkCUZvbyggdm9pZCApIHsgY291dCA8PCAiRGVyaXZlZDo6Rm9vKCkiPDwgZW5kbDsgfTsKfTsKCnZvaWQgQmFyKCBBYnN0cmFjdCYgb2JqICkgewoJb2JqLkZvbygpOwp9CgppbnQgbWFpbih2b2lkKSB7CglEZXJpdmVkIFg7CglCYXIoIFggKTsKICAgIHJldHVybiAwOwp9