Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstring>
- #include <iostream>
- #include <vector>
- using namespace std;
- class Ability
- {
- public:
- virtual void activate() = 0;
- };
- class HealAbility:public Ability
- {
- public:
- virtual void activate()
- {
- cout << " Unit is healing\n";
- }
- };
- class DiggingAbility :public Ability
- {
- public:
- virtual void activate()
- {
- cout << " Unit is Digging\n";
- }
- };
- class StealthAbility :public Ability
- {
- public:
- virtual void activate()
- {
- cout << " Unit is Steal\n";
- }
- };
- class NullAbiliti :public Ability
- {
- void activate()
- {
- }
- };
- class Unit
- {
- Ability* sa;
- public:
- Unit()
- {
- sa = new NullAbiliti;
- }
- void ActiveteAbility()
- {
- sa->activate();
- }
- void setAbility(Ability*other_sa)
- {
- delete[] sa;
- sa = other_sa;
- }
- virtual void move()
- {
- cout << "Move\n";
- }
- virtual void attack()
- {
- cout << "Attack\n";
- }
- };
- class Soldier : public Unit
- {
- public:
- void move()
- {
- cout << "Soldier moves\n";
- }
- void attack()
- {
- cout << "Soldier attacks\n";
- }
- };
- class Knight : public Unit
- {
- public:
- void move()
- {
- cout << "Knight moves\n";
- }
- void attack()
- {
- cout << "Knight attacks\n";
- }
- };
- class Worker : public Unit
- {
- public:
- void move()
- {
- cout << "Worker moves\n";
- }
- void attack()
- {
- cout << "Worker attacks\n";
- }
- };
- void main()
- {
- vector <Unit*>v;
- v.push_back(new Soldier);
- v.push_back(new Knight);
- v.push_back(new Worker);
- for (auto obj : v)
- {
- obj->move();
- obj->attack();
- }
- Unit*p = new Soldier;
- p->setAbility(new HealAbility);
- p->ActiveteAbility();
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement