#include <vector>
#include <memory>
#include <iostream>

class parent{
public:
  virtual int foo() = 0;
};
class child1:public parent{
  virtual int foo(){ return 1; }
};
class child2:public parent{
  virtual int foo(){ return 2; }
};

int main(){
std::vector<std::shared_ptr<parent>> v;
v.push_back( std::shared_ptr<parent>(new child1()));
v.push_back( std::shared_ptr<parent>(new child2()));

std::cout << "v[0]:" << v[0]->foo() << std::endl;
std::cout << "v[1]:" << v[1]->foo() << std::endl;
}
