#pragma once #include #include #include class Bureaucrat; class Form { public: Form(); Form(const Form& other); Form(const std::string& name); Form(const std::string& name, const unsigned short gradeToSign, const unsigned short gradeToExecute); void beSigned(Bureaucrat& bureaucrat); const std::string& getName() const; bool getIsSigned() const; unsigned short getGradeToSign() const; unsigned short getGradeToExecute() const; Form& operator=(const Form& other); virtual ~Form(); private: const std::string name; bool isSigned; const unsigned short gradeToSign; const unsigned short gradeToExecute; class GradeTooHighException : public std::exception { public: const char* what() const throw() { return "Grade too high"; } }; class GradeTooLowException : public std::exception { public: const char* what() const throw() { return "Grade too low"; } }; }; std::ostream& operator<<(std::ostream& ostream, const Form& form);