#include <iostream>
struct FooBar {
virtual void Foo() = 0;
virtual void Bar() = 0;
};
class foo : public FooBar {
public:
void Foo() override {
std::cout << "foo::Foo" << std::endl;
}
void Bar() override {
Foo();
std::cout << "foo::Bar" << std::endl;
}
};
class bar : public foo {
public:
void Foo() override {
std::cout << "bar::Foo" << std::endl;
}
};
int main() {
FooBar* fb = new bar();
fb->Bar();
delete fb;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgpzdHJ1Y3QgRm9vQmFyIHsKICAgIHZpcnR1YWwgdm9pZCBGb28oKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgQmFyKCkgPSAwOwp9OwoKY2xhc3MgZm9vIDogcHVibGljIEZvb0JhciB7CnB1YmxpYzoKICAgIHZvaWQgRm9vKCkgb3ZlcnJpZGUgewogICAgICAgIHN0ZDo6Y291dCA8PCAiZm9vOjpGb28iIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIHZvaWQgQmFyKCkgb3ZlcnJpZGUgewogICAgICAgIEZvbygpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiZm9vOjpCYXIiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmNsYXNzIGJhciA6IHB1YmxpYyBmb28gewpwdWJsaWM6CiAgICB2b2lkIEZvbygpIG92ZXJyaWRlIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImJhcjo6Rm9vIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIEZvb0JhciogZmIgPSBuZXcgYmFyKCk7CiAgICBmYi0+QmFyKCk7CiAgICBkZWxldGUgZmI7CiAgICByZXR1cm4gMDsKfQ==