H 檔案
#ifndef Rectangle_h#define Rectangle_hclass 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
C檔案代碼
#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;}