#pragma once #include #include #include #include "Bureaucrat.hpp" class Form { private: const std::string _name; bool _isSigned; const int _signGrade; const int _executeGrade; public: Form() = delete; Form(std::string name, int signGrade, int executeGrade); Form(const Form &other); ~Form(); Form &operator=(const Form &other) = delete; const std::string &getName() const; bool getIsSigned() const; int getSignGrade() const; int getExecuteGrade() const; void beSigned(const Bureaucrat &bureaucrat); class GradeTooHighException : public std::exception { public: const char *what() const throw(); }; class GradeTooLowException : public std::exception { public: const char *what() const throw(); }; class FormAlreadySignedException : public std::exception { public: const char *what() const throw(); }; }; std::ostream &operator<<(std::ostream &os, const Form &form);