#ifndef ASPELL_HPP #define ASPELL_HPP #include #include class ATarget; class ASpell { protected: std::string name; std::string effects; public: ASpell() {} ASpell(ASpell const & other) { *this = other; } ASpell & operator=(ASpell const & other) { this->name = other.name; this->effects = other.effects; return *this; } ASpell(std::string const & name, std::string const & effects) { this->name = name; this->effects = effects; } virtual ~ASpell() {} std::string const & getName() const { return this->name; } std::string const & getEffects() const { return this->effects; } void launch(ATarget const &) const; virtual ASpell * clone() const = 0; }; #include "ATarget.hpp" #endif