#include <iostream>
#include <vector>
struct Animal {
virtual void talk() = 0;
};
struct Dog : Animal {
void talk() override {
std::cout << "guau guau" << std::endl;
}
};
struct Cat : Animal {
void talk() override {
std::cout << "miau miau" << std::endl;
}
};
int main() {
auto x = Dog{};
auto y = Cat{};
std::vector<Animal*> pets{&x, &y};
for(auto& pet : pets) {
pet->talk();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEFuaW1hbCB7CiAgICB2aXJ0dWFsIHZvaWQgdGFsaygpID0gMDsKfTsKCnN0cnVjdCBEb2cgOiBBbmltYWwgewogICAgdm9pZCB0YWxrKCkgb3ZlcnJpZGUgewogICAgICAgIHN0ZDo6Y291dCA8PCAiZ3VhdSBndWF1IiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpzdHJ1Y3QgQ2F0IDogQW5pbWFsIHsKICAgIHZvaWQgdGFsaygpIG92ZXJyaWRlIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIm1pYXUgbWlhdSIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBhdXRvIHggPSBEb2d7fTsKICAgIGF1dG8geSA9IENhdHt9OwoKICAgIHN0ZDo6dmVjdG9yPEFuaW1hbCo+IHBldHN7JngsICZ5fTsKCiAgICBmb3IoYXV0byYgcGV0IDogcGV0cykgewogICAgICAgIHBldC0+dGFsaygpOwogICAgfQoKICAgIHJldHVybiAwOwp9