#ifndef WARLOCK_HPP #define WARLOCK_HPP #include #include #include #include "ASpell.hpp" #include "ATarget.hpp" class Warlock { private: Warlock(); Warlock(Warlock const & other); Warlock & operator=(Warlock const & other); std::string name; std::string title; std::map arr; public: Warlock(std::string const & name, std::string const & title) { this->name = name; this->title = title; std::cout << this->name << ": This looks like another boring day.\n"; } ~Warlock() { std::cout << this->name << ": My job here is done!\n"; std::map::iterator it; for (it = arr.begin(); it != arr.end(); ++it) delete it->second; this->arr.clear(); } std::string const & getName() const { return this->name; } std::string const & getTitle() const { return this->title; } void setTitle(std::string const & title) { this->title = title; } void introduce() const { std::cout << this->name << ": I am " << this->name << ", " << this->title << "!\n"; } void learnSpell(ASpell * aspell) { if (aspell) { arr.insert(std::pair ( aspell->getName(), aspell->clone() )); } } void forgetSpell(std::string spell_name) { ASpell * spell = arr[spell_name]; if (spell) { delete spell; arr.erase(spell_name); } } void launchSpell(std::string spell_name, ATarget const & atarget) { ASpell * spell = arr[spell_name]; if (spell) spell->launch(atarget); } }; #endif