#include <iostream>
#include <vector>
using namespace std;
struct A {
virtual void foo () { cout<<"nothing!"<<endl; }
};
struct B : A {
void foo () override { cout<<"this is a B object: foo!"<<endl; }
};
struct C : A {};
int main() {
vector<A*> va;
va.push_back (new A);
va.push_back (new B);
va.push_back(new C);
for (auto x : va)
x->foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEEgewoJdmlydHVhbCB2b2lkIGZvbyAoKSB7IGNvdXQ8PCJub3RoaW5nISI8PGVuZGw7IH0KfTsKc3RydWN0IEIgOiBBIHsKCXZvaWQgZm9vICgpIG92ZXJyaWRlIHsgY291dDw8InRoaXMgaXMgYSBCIG9iamVjdDogZm9vISI8PGVuZGw7IH0KfTsKc3RydWN0IEMgOiBBIHt9OwoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8QSo+IHZhOyAKCXZhLnB1c2hfYmFjayAobmV3IEEpOwoJdmEucHVzaF9iYWNrIChuZXcgQik7IAoJdmEucHVzaF9iYWNrKG5ldyBDKTsgCglmb3IgKGF1dG8geCA6IHZhKSAKCSAgIHgtPmZvbygpOyAKCXJldHVybiAwOwp9