Advertisement
Timtsa

27.12

Dec 27th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <cstring>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. class Ability
  9. {
  10.  
  11. public:
  12.     virtual void activate() = 0;
  13.  
  14. };
  15.  
  16. class HealAbility:public Ability
  17. {
  18. public:
  19.     virtual void activate()
  20.     {
  21.         cout << " Unit is healing\n";
  22.     }
  23. };
  24.  
  25. class DiggingAbility :public Ability
  26. {
  27. public:
  28.     virtual void activate()
  29.     {
  30.         cout << " Unit is Digging\n";
  31.     }
  32. };
  33.  
  34. class StealthAbility :public Ability
  35. {
  36. public:
  37.     virtual void activate()
  38.     {
  39.         cout << " Unit is Steal\n";
  40.     }
  41. };
  42.  
  43. class NullAbiliti :public Ability
  44. {
  45.     void activate()
  46.     {
  47.  
  48.     }
  49. };
  50.  
  51. class Unit
  52. {
  53.  
  54.     Ability* sa;
  55.  
  56. public:
  57.     Unit()
  58.     {
  59.         sa = new NullAbiliti;
  60.     }
  61.     void ActiveteAbility()
  62.     {
  63.         sa->activate();
  64.     }
  65.     void setAbility(Ability*other_sa)
  66.     {
  67.         delete[] sa;
  68.         sa = other_sa;
  69.     }
  70.     virtual void move()
  71.     {
  72.         cout << "Move\n";
  73.     }
  74.     virtual void attack()
  75.     {
  76.         cout << "Attack\n";
  77.     }
  78. };
  79.  
  80. class Soldier : public Unit
  81. {
  82. public:
  83.    
  84.    
  85.     void move()
  86.     {
  87.         cout << "Soldier moves\n";
  88.     }
  89.    
  90.    
  91.    
  92.     void attack()
  93.     {
  94.         cout << "Soldier attacks\n";
  95.     }
  96. };
  97.  
  98. class Knight : public Unit
  99. {
  100. public:
  101.     void move()
  102.     {
  103.         cout << "Knight moves\n";
  104.     }
  105.     void attack()
  106.     {
  107.         cout << "Knight attacks\n";
  108.     }
  109. };
  110.  
  111. class Worker : public Unit
  112. {
  113. public:
  114.     void move()
  115.     {
  116.         cout << "Worker moves\n";
  117.     }
  118.     void attack()
  119.     {
  120.         cout << "Worker attacks\n";
  121.     }
  122. };
  123.  
  124.  
  125.  
  126. void main()
  127. {
  128.     vector <Unit*>v;
  129.     v.push_back(new Soldier);
  130.     v.push_back(new Knight);
  131.     v.push_back(new Worker);
  132.     for (auto obj : v)
  133.     {
  134.         obj->move();
  135.         obj->attack();
  136.     }
  137.    
  138.     Unit*p = new Soldier;
  139.     p->setAbility(new HealAbility);
  140.     p->ActiveteAbility();
  141.    
  142.     system("pause");
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement