#include #include #include #include using std::string; using std::list; using std::stack; using std::cout; using std::endl; using std::ios; class Command { public: Command(const string& n) : name(n) {} virtual ~Command() {} const string & getName() const { return name; } virtual void execute(list &) = 0; void print() const { cout << "class: " << name << endl; } private: string name; Command() : name("unknown") {} protected: static stack< list > commandStack; }; class ExitCommand : public Command { public: ExitCommand(const string & name) : Command(name) {} void execute(list &); private: }; class InvalidCommand : public Command { public: InvalidCommand(const string & name) : Command(name) {} void execute(list &); private: }; class GiveHelpCommand : public Command { public: GiveHelpCommand(const string & name) : Command(name) {} void execute(list &); private: }; class UndoCommand : public Command { public: UndoCommand(const string & name) : Command(name) {} void execute(list &); }; class GetNumberCommand : public Command { public: GetNumberCommand(const string & name) : Command(name) {} void execute(list &); }; class LoadNumbersCommand : public Command { public: LoadNumbersCommand(const string & name) : Command(name) {} void execute(list &); }; class SaveNumbersCommand : public Command { public: SaveNumbersCommand(const string & name) : Command(name) {} void execute(list &); }; class PutNumbersCommand : public Command { public: PutNumbersCommand(const string & name) : Command(name) {} void execute(list &); }; class SortNumbersCommand : public Command { public: SortNumbersCommand(const string & name) : Command(name) {} void execute(list &); };