#include <iostream>
#include <vector>
struct Entity
{
virtual ~Entity() = default;
virtual void Update() { std::cout << "Entity\n"; }
};
struct NPC : Entity
{
virtual void Update() { std::cout << "NPC\n"; }
};
struct Trap : NPC
{
virtual void Update() { std::cout << "Trap\n"; }
};
int main() {
Entity the_entity;
NPC npc;
Trap trap;
std::vector<Entity*> entities = {&the_entity, &npc, &trap};
for (auto* entity : entities)
{
entity->Update();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEVudGl0eQp7Cgl2aXJ0dWFsIH5FbnRpdHkoKSA9IGRlZmF1bHQ7Cgl2aXJ0dWFsIHZvaWQgVXBkYXRlKCkgeyBzdGQ6OmNvdXQgPDwgIkVudGl0eVxuIjsgfQp9OwoKc3RydWN0IE5QQyA6IEVudGl0eQp7Cgl2aXJ0dWFsIHZvaWQgVXBkYXRlKCkgeyBzdGQ6OmNvdXQgPDwgIk5QQ1xuIjsgfQp9OwoKc3RydWN0IFRyYXAgOiBOUEMKewoJdmlydHVhbCB2b2lkIFVwZGF0ZSgpIHsgc3RkOjpjb3V0IDw8ICJUcmFwXG4iOyB9Cn07CgoKaW50IG1haW4oKSB7CglFbnRpdHkgdGhlX2VudGl0eTsKCU5QQyBucGM7CglUcmFwIHRyYXA7CglzdGQ6OnZlY3RvcjxFbnRpdHkqPiBlbnRpdGllcyA9IHsmdGhlX2VudGl0eSwgJm5wYywgJnRyYXB9OwoJCglmb3IgKGF1dG8qIGVudGl0eSA6IGVudGl0aWVzKQoJewoJCWVudGl0eS0+VXBkYXRlKCk7Cgl9Cn0K