#include <iostream>
#include <vector>
#include <list>
using namespace std;
class Shape
{
public:
virtual void draw() = 0;
virtual ~Shape(){}
};
class Circle:public Shape
{
public:
void draw(){cout<<"Circle::draw\n";}
~Circle(){cout<<"~Circle\n";}
};
class Triangle:public Shape
{
public:
void draw(){ cout<<"Triangle::draw\n";}
~Triangle(){ cout<<"~Triangle\n";}
};
class Square:public Shape
{
public:
void draw(){ cout<<"Square::draw\n";}
~Square(){ cout<<"~Sauare\n";}
};
typedef vector<Shape*> Container;
//typedef list<Shape*> Container;
typedef Container::iterator Iter;
int main()
{
Container shapes;
shapes.push_back (new Circle());
shapes.push_back (new Triangle());
shapes.push_back (new Square());
for(Iter i = shapes.begin ();i != shapes.end ();i++)
{
(*i)->draw();
}
for(Iter j = shapes.begin ();j != shapes.end ();j++)
{
delete *j;
}
system("pause");
}