#include <iostream>
class Animal
{
public:
virtual ~Animal() {};
virtual void doSmth() = 0;
};
class Cat : public Animal
{
public:
void doSmth() override
{
std::cout << "Miau" << std::endl;
}
};
class Dog : public Animal
{
public:
void doSmth() override
{
std::cout << "Wuff" << std::endl;
}
};
int main()
{
Dog dog;
Cat cat;
Animal *animal = &dog;
animal->doSmth();
animal = &cat;
animal->doSmth();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQW5pbWFsCnsKcHVibGljOgogICAgdmlydHVhbCB+QW5pbWFsKCkge307CiAgICAKICAgIHZpcnR1YWwgdm9pZCBkb1NtdGgoKSA9IDA7Cn07CgpjbGFzcyBDYXQgOiBwdWJsaWMgQW5pbWFsCnsKcHVibGljOgogICAgdm9pZCBkb1NtdGgoKSBvdmVycmlkZQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiTWlhdSIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKY2xhc3MgRG9nIDogcHVibGljIEFuaW1hbAp7CnB1YmxpYzoKICAgIHZvaWQgZG9TbXRoKCkgb3ZlcnJpZGUKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIld1ZmYiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgRG9nIGRvZzsKICAgIENhdCBjYXQ7CgogICAgQW5pbWFsICphbmltYWwgPSAmZG9nOwogICAgYW5pbWFsLT5kb1NtdGgoKTsKICAgIAogICAgYW5pbWFsID0gJmNhdDsKICAgIGFuaW1hbC0+ZG9TbXRoKCk7CgogICAgcmV0dXJuIDA7Cn0K