H 文件
#ifndef Rectangle_h
#define Rectangle_h
class Drawing
{
public:
virtual void drawLine() = 0;
virtual void drawCircle() = 0;
};
class V1Drawing:public Drawing
{
public:
void drawLine();
void drawCircle();
};
class V2Drawing:public Drawing
{
public:
void drawLine();
void drawCircle();
};
class Shape
{
public:
Shape(Drawing* cDrawing)
{
m_pDrawing = cDrawing;
}
virtual void draw()=0;
protected:
void drawLine();
void drawCircle();
private:
Drawing* m_pDrawing;
};
class Rectangle: public Shape
{
public:
Rectangle(Drawing* pDrawing):Shape(pDrawing){}
void draw();
};
class Circle: public Shape
{
public:
Circle(Drawing* pDrawing):Shape(pDrawing){}
void draw();
};
#endif
#include "Rectangle.h"
#include "iostream"
using namespace std;
void V1Drawing::drawLine()
{
cout<<"V1Drawing::void drawLine()"<<endl;
}
void V1Drawing::drawCircle()
{
cout<<"V1Drawing::void drawCircle()"<<endl;
}
void V2Drawing::drawLine()
{
cout<<"V2Drawing::void drawLine()"<<endl;
}
void V2Drawing::drawCircle()
{
cout<<"V2Drawing::void drawLine()"<<endl;
}
void Shape::drawLine()
{
m_pDrawing->drawLine();
}
void Shape::drawCircle()
{
m_pDrawing->drawCircle();
}
void Rectangle::draw()
{
drawLine();
}
void Circle::draw()
{
drawCircle();
}
Main 文件代码
#include "iostream"
#include "Rectangle.h"
using namespace std;
void main(void)
{
Drawing* pV1Drawing = new V1Drawing;
Drawing* pV2Drawing = new V2Drawing;
Rectangle cRectangle1(pV1Drawing);
cRectangle1.draw();
Rectangle cRectangle2(pV2Drawing);
cRectangle2.draw();
Circle cCircle1(pV1Drawing);
cCircle1.draw();
Circle cCircle2(pV2Drawing);
cCircle2.draw();
delete pV1Drawing;
delete pV2Drawing;
}