#pragma once #include namespace odhtdb { class User; } namespace dchat { class User { public: enum class Type { ONLINE, OFFLINE, SYSTEM }; User(Type type); virtual ~User(){} virtual const std::string& getName() const = 0; const Type type; }; class OnlineUser : public User { public: OnlineUser(const odhtdb::User *databaseUser); virtual const std::string& getName() const override; std::string name; const odhtdb::User *databaseUser; }; class OfflineUser : public User { public: OfflineUser(const std::string &name); virtual const std::string& getName() const override; const std::string name; }; class SystemUser : public User { public: SystemUser(); virtual const std::string& getName() const override; }; }