Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class IDrawer
  4. {
  5. public:
  6. virtual void drawCircle(int x, int y, double radius) = 0;
  7. };
  8.  
  9. class SmallCircleDrawer : public IDrawer
  10. {
  11. public:
  12. virtual void drawCircle(int x, int y, double radius)
  13. {
  14. std::cout << "Small circle center = ( " << x << ", " << y << " ) radius = " << radius * RADIUS_MULTIPLIER << std::endl;
  15. }
  16. private:
  17. static const double RADIUS_MULTIPLIER = 0.25;
  18. };
  19.  
  20. class LargeCircleDrawer : public IDrawer
  21. {
  22. public:
  23. virtual void drawCircle(int x, int y, double radius)
  24. {
  25. std::cout << "Large circle center = ( " << x << ", " << y << " ) radius = " << radius * RADIUS_MULTIPLIER << std::endl;
  26. }
  27. private:
  28. static const double RADIUS_MULTIPLIER = 10.0;
  29. };
  30.  
  31. class Shape
  32. {
  33. public:
  34. Shape(IDrawer *drawer)
  35. {
  36. this->drawer = drawer;
  37. }
  38.  
  39. virtual void draw() = 0;
  40. virtual void enlargeRadius(double multiplier) = 0;
  41. protected:
  42. IDrawer *drawer;
  43. };
  44.  
  45. class Circle : public Shape
  46. {
  47. public:
  48. Circle(int x, int y, double radius, IDrawer *drawer) : Shape(drawer)
  49. {
  50. this->x = x;
  51. this->y = y;
  52. this->radius = radius;
  53. }
  54.  
  55.  
  56. virtual void draw()
  57. {
  58. drawer->drawCircle(x, y, radius);
  59. }
  60.  
  61. virtual void enlargeRadius(double multiplier)
  62. {
  63. radius *= multiplier;
  64. }
  65. private:
  66. int x;
  67. int y;
  68. double radius;
  69. };
  70.  
  71. int main()
  72. {
  73. Circle *circle;
  74. circle = new Circle(5, 10, 10, new LargeCircleDrawer());
  75. circle->draw();
  76. circle = new Circle(20, 30, 100, new SmallCircleDrawer());
  77. circle->draw();
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement