class Drawing
{
public:
virtual void drawLine() = 0;
virtual void drawCircle() = 0;
};
class V1Drawing:public Drawing
{
public:
virtual void drawLine()
{
cout<<"V1 draw line"<<endl;
}
virtual void drawCircle()
{
cout<<"V1 draw circle"<<endl;
}
};
class V2Drawing:public Drawing
{
public:
virtual void drawLine()
{
cout<<"V2 draw line"<<endl;
}
virtual void drawCircle()
{
cout<<"V2 draw circle"<<endl;
}
};
class shape
{
public:
shape(){}
shape(Drawing* pDrawing)
{
m_pdrawing = pDrawing;
}
~shape()
{
delete m_pdrawing;
m_pdrawing = NULL;
}
virtual void draw()=0;
void drawLine()
{
m_pdrawing->drawLine();
}
void drawCircle()
{
m_pdrawing->drawCircle();
}
private:
Drawing* m_pdrawing;
};
class Rectangle:public shape
{
public:
Rectangle(Drawing* pDrawing):shape(pDrawing){}
~Rectangle(){}
virtual void draw()
{
drawLine();
}
};
class Circle:public shape
{
public:
Circle(Drawing* pDrawing):shape(pDrawing){}
~Circle(){}
virtual void draw()
{
drawCircle();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
LIST_HEAD(new_list);
INIT_LIST_HEAD(&new_list);
Drawing* pDrawing = new V1Drawing();
shape* pshape = new Circle(pDrawing);
pshape->draw();
delete pshape;
pshape = NULL;
pDrawing = NULL;
pDrawing = new V2Drawing();
pshape = new Rectangle(pDrawing);
pshape->draw();
delete pshape;
return 0;
}