#include <iostream>
class Base {
public:
virtual void foo() { std::cout << "Base::foo()\n"; }
virtual bool isDerived() const { return false; }
};
class Derived : public Base {
public:
void foo() override { std::cout << "Derived::foo()\n"; }
bool isDerived() const { return true; }
};
int main() {
Base* crrPos = new Derived;
crrPos->foo();
bool isDerived = crrPos->isDerived();
std::cout << isDerived << '\n';
delete crrPos;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCiAgICBjbGFzcyBCYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgZm9vKCkgeyBzdGQ6OmNvdXQgPDwgIkJhc2U6OmZvbygpXG4iOyB9CiAgICAgICAgdmlydHVhbCBib29sIGlzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICB9OwoKICAgIGNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBmb28oKSBvdmVycmlkZSB7IHN0ZDo6Y291dCA8PCAiRGVyaXZlZDo6Zm9vKClcbiI7IH0KICAgICAgICBib29sIGlzRGVyaXZlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgIH07CgogICAgaW50IG1haW4oKSB7CiAgICAgICAgQmFzZSogY3JyUG9zID0gbmV3IERlcml2ZWQ7CiAgICAgICAgY3JyUG9zLT5mb28oKTsKICAgICAgICBib29sIGlzRGVyaXZlZCA9IGNyclBvcy0+aXNEZXJpdmVkKCk7CiAgICAgICAgc3RkOjpjb3V0IDw8IGlzRGVyaXZlZCA8PCAnXG4nOwogICAgICAgIGRlbGV0ZSBjcnJQb3M7CiAgICB9Cg==