#ifndef GUEST_H #define GUEST_H #include #include "poolparty.h" // ================================================================= class Guest { public: Guest(std::string const& n); virtual ~Guest() = default; void update_answer(Pool_Party const& pp) const; private: virtual void update(Pool_Party const& pp) const = 0; protected: std::string name; }; // ================================================================= class Committed_Guest : public Guest { public: using Guest::Guest; private: void update(Pool_Party const& pp) const final; }; // ================================================================= class Hesitant_Guest : public Guest { public: using Guest::Guest; protected: virtual bool will_decline(Pool_Party const& pp) const = 0; virtual std::string get_reason() const = 0; private: void update(Pool_Party const& pp) const final; }; // ================================================================= class Prude_Guest : public Hesitant_Guest { public: using Hesitant_Guest::Hesitant_Guest; bool will_decline(Pool_Party const& pp) const override; std::string get_reason() const override; }; // ================================================================= class Busy_Guest : public Hesitant_Guest { public: Busy_Guest(std::string const& n, int h); bool will_decline(Pool_Party const& pp) const override; std::string get_reason() const override; private: int can_not_before_hour; }; #endif