#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class SandboxObject {
public:
virtual void show() const { cout << "Unknown sandbox object " << this <<endl; }
};
class Circle : public SandboxObject {
public:
void show() const override { cout << "Circle " << this <<endl; }
};
class Rectangle : public SandboxObject {
public:
void show() const override { cout << "Rectangle " << this <<endl; }
};
int main() {
vector<shared_ptr<SandboxObject>> universe;
universe.push_back(make_shared<Circle>());
universe.push_back(make_shared<Rectangle>());
universe.push_back(make_shared<Circle>());
for (auto x:universe)
x->show();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU2FuZGJveE9iamVjdCB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBzaG93KCkgY29uc3QgeyBjb3V0IDw8ICJVbmtub3duIHNhbmRib3ggb2JqZWN0ICIgPDwgdGhpcyA8PGVuZGw7IH0KfTsKY2xhc3MgQ2lyY2xlIDogcHVibGljIFNhbmRib3hPYmplY3QgewpwdWJsaWM6IAogICAgIHZvaWQgc2hvdygpIGNvbnN0IG92ZXJyaWRlIHsgY291dCA8PCAiQ2lyY2xlICIgPDwgdGhpcyA8PGVuZGw7IH0KfTsKY2xhc3MgUmVjdGFuZ2xlIDogcHVibGljIFNhbmRib3hPYmplY3QgewpwdWJsaWM6IAogICAgIHZvaWQgc2hvdygpIGNvbnN0IG92ZXJyaWRlIHsgY291dCA8PCAiUmVjdGFuZ2xlICIgPDwgdGhpcyA8PGVuZGw7IH0KfTsKCmludCBtYWluKCkgewoJdmVjdG9yPHNoYXJlZF9wdHI8U2FuZGJveE9iamVjdD4+IHVuaXZlcnNlOyAKCXVuaXZlcnNlLnB1c2hfYmFjayhtYWtlX3NoYXJlZDxDaXJjbGU+KCkpOwoJdW5pdmVyc2UucHVzaF9iYWNrKG1ha2Vfc2hhcmVkPFJlY3RhbmdsZT4oKSk7Cgl1bml2ZXJzZS5wdXNoX2JhY2sobWFrZV9zaGFyZWQ8Q2lyY2xlPigpKTsKCWZvciAoYXV0byB4OnVuaXZlcnNlKSAKCQl4LT5zaG93KCk7IAoJCglyZXR1cm4gMDsKfQ==