#include <iostream>
#include <vector>
class A
{
public:
virtual void print() const { std::cout << "I'm an A!" << std::endl; }
};
class B : public A
{
public:
void print() const { std::cout << "I'm a B!" << std::endl; }
};
int main() {
std::vector<A> v;
std::vector<A*> vv;
v.push_back(A());
v.push_back(B());
for(const auto& x : v)
{
x.print();
}
vv.push_back(new A);
vv.push_back(new B);
for(const auto& x : vv)
{
x->print();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgQQp7CglwdWJsaWM6CgkJdmlydHVhbCB2b2lkIHByaW50KCkgY29uc3QgeyBzdGQ6OmNvdXQgPDwgIkknbSBhbiBBISIgPDwgc3RkOjplbmRsOyB9Cn07CgpjbGFzcyBCIDogcHVibGljIEEKewoJcHVibGljOgoJCXZvaWQgcHJpbnQoKSBjb25zdCB7IHN0ZDo6Y291dCA8PCAiSSdtIGEgQiEiIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxBPiB2OwoJc3RkOjp2ZWN0b3I8QSo+IHZ2OwoJCgl2LnB1c2hfYmFjayhBKCkpOwoJdi5wdXNoX2JhY2soQigpKTsKCglmb3IoY29uc3QgYXV0byYgeCA6IHYpCgl7CgkJeC5wcmludCgpOwoJfQoJCgl2di5wdXNoX2JhY2sobmV3IEEpOwoJdnYucHVzaF9iYWNrKG5ldyBCKTsKCQoJZm9yKGNvbnN0IGF1dG8mIHggOiB2dikKCXsKCQl4LT5wcmludCgpOwoJfQoJCglyZXR1cm4gMDsKfQ==