#include <list>
#include <iostream>
#include <memory>
using namespace std;
class Person {
public:
virtual ~Person() = default;
virtual void talk()=0;
};
class Student : public Person {
public:
void talk() {
cout << "Teach me!\n";
}
};
class Teacher : public Person {
public:
void talk() {
cout << "Listen!\n";
}
};
int main() {
list<std::unique_ptr<Person>> people;
people.push_back(unique_ptr<Person>(new Student()));
people.push_back(unique_ptr<Person>(new Teacher()));
for (auto& p : people) {
p->talk();
}
return 0;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFBlcnNvbiB7CnB1YmxpYzoKCXZpcnR1YWwgflBlcnNvbigpID0gZGVmYXVsdDsKCXZpcnR1YWwgdm9pZCB0YWxrKCk9MDsKfTsKCmNsYXNzIFN0dWRlbnQgOiBwdWJsaWMgUGVyc29uIHsKcHVibGljOgoJdm9pZCB0YWxrKCkgewoJCWNvdXQgPDwgIlRlYWNoIG1lIVxuIjsKCX0KfTsKCmNsYXNzIFRlYWNoZXIgOiBwdWJsaWMgUGVyc29uIHsKCXB1YmxpYzoKCXZvaWQgdGFsaygpIHsKCQljb3V0IDw8ICJMaXN0ZW4hXG4iOwoJfQp9OwoKaW50IG1haW4oKSB7CglsaXN0PHN0ZDo6dW5pcXVlX3B0cjxQZXJzb24+PiBwZW9wbGU7CglwZW9wbGUucHVzaF9iYWNrKHVuaXF1ZV9wdHI8UGVyc29uPihuZXcgU3R1ZGVudCgpKSk7CglwZW9wbGUucHVzaF9iYWNrKHVuaXF1ZV9wdHI8UGVyc29uPihuZXcgVGVhY2hlcigpKSk7CgkKCWZvciAoYXV0byYgcCA6IHBlb3BsZSkgewoJCXAtPnRhbGsoKTsKCX0KCQoJcmV0dXJuIDA7Cn0=