Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. class Color
  5. {
  6. public:
  7. virtual void accept(class Visitor*) = 0;
  8. };
  9.  
  10. class Red: public Color
  11. {
  12. public:
  13. void accept(Visitor*);
  14. void clubA()
  15. {
  16. cout << "Red = club(A)\n";
  17. }
  18. };
  19. class Blu: public Color
  20. {
  21. public:
  22. void accept(Visitor*);
  23. void clubB()
  24. {
  25. cout << "Blu = club(B)\n";
  26. }
  27. };
  28.  
  29. class Visitor
  30. {
  31. public:
  32. virtual void visit(Red*) = 0;
  33. virtual void visit(Blu*) = 0;
  34. };
  35.  
  36. class CountVisitor: public Visitor
  37. {
  38. public:
  39. CountVisitor()
  40. {
  41. m_num_red = m_num_blu = 0;
  42. }
  43. /*virtual*/void visit(Red*)
  44. {
  45. ++m_num_red;
  46. }
  47. /*virtual*/void visit(Blu*)
  48. {
  49. ++m_num_blu;
  50. }
  51. void report_num()
  52. {
  53. cout << " " ;
  54. cout << "CLUB(A): " << m_num_red << " VS CLUB(B): " << m_num_blu << '\n';
  55. }
  56. private:
  57. int m_num_red, m_num_blu;
  58. };
  59.  
  60. class CallVisitor: public Visitor
  61. {
  62. public:
  63. void visit(Red *r)
  64. {
  65. r->clubA();
  66. }
  67. void visit(Blu *b)
  68. {
  69. b->clubB();
  70. }
  71. };
  72.  
  73. void Red::accept(Visitor *v)
  74. {
  75. v->visit(this);
  76. }
  77.  
  78. void Blu::accept(Visitor *v)
  79. {
  80. v->visit(this);
  81. }
  82.  
  83. int main()
  84. {
  85. Color *set[] =
  86. {
  87. new Red, new Blu, new Blu, new Red, new Red, new Blu, new Blu, new Red, new Blu, new Blu, new Blu, 0
  88. };
  89.  
  90.  
  91. CountVisitor count_operation;
  92. CallVisitor call_operation;
  93. for (int i = 0; set[i]; i++)
  94. {
  95. set[i]->accept(&count_operation);
  96. set[i]->accept(&call_operation);
  97. }
  98.  
  99. count_operation.report_num();
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement