#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"); }