#include <iostream>
#include <memory>
#include <vector>
class Foo
{
public:
virtual void Update(){
std::cout << "Update idle" << std::endl;
};
};
class Foo1 : public Foo
{
public:
void Update() override
{
std::cout << "Update Foo1" << std::endl;
}
};
class Foo2 : public Foo
{
void Update() override
{
std::cout << Bar() << std::endl;
}
std::string Bar(){
return "Update Foo2";
}
};
int main() {
std::vector<std::shared_ptr<Foo>> vec{
std::make_shared<Foo>(),
std::make_shared<Foo1>(),
std::make_shared<Foo2>()
};
for (auto &&ptr : vec)
{
ptr->Update();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgRm9vCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIFVwZGF0ZSgpewogICAgICAgIHN0ZDo6Y291dCA8PCAiVXBkYXRlIGlkbGUiIDw8IHN0ZDo6ZW5kbDsKICAgIH07IAp9OwoKY2xhc3MgRm9vMSA6IHB1YmxpYyBGb28KewpwdWJsaWM6CiAgICB2b2lkIFVwZGF0ZSgpIG92ZXJyaWRlCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJVcGRhdGUgRm9vMSIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKY2xhc3MgRm9vMiA6IHB1YmxpYyBGb28KewogICAgdm9pZCBVcGRhdGUoKSBvdmVycmlkZQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBCYXIoKSA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgc3RkOjpzdHJpbmcgQmFyKCl7CiAgICAgICAgcmV0dXJuICJVcGRhdGUgRm9vMiI7CiAgICB9Cn07CgoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8Rm9vPj4gdmVjewogICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8Rm9vPigpLCAKICAgICAgICBzdGQ6Om1ha2Vfc2hhcmVkPEZvbzE+KCksIAogICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8Rm9vMj4oKQogICAgfTsKCiAgICBmb3IgKGF1dG8gJiZwdHIgOiB2ZWMpCiAgICB7CiAgICAgICAgcHRyLT5VcGRhdGUoKTsKICAgIH0KfQ==