#pragma once #include #include #include #define HIGHEST_GRADE 1 #define LOWEST_GRADE 150 class Bureaucrat { private: const std::string _name; int _grade; public: // Constructors Bureaucrat() = delete; Bureaucrat(std::string name, int grade); // Copy constructor and copy assignment operator Bureaucrat(const Bureaucrat &other); Bureaucrat &operator=(const Bureaucrat &other) = delete; // Move constructor and move assignment operator Bureaucrat(Bureaucrat &&other) noexcept; Bureaucrat &operator=(Bureaucrat &&other) noexcept = delete; // Destructor ~Bureaucrat(); Bureaucrat &operator++(); // Pre-increment Bureaucrat operator++(int); // Post-increment Bureaucrat &operator--(); // Pre-decrement Bureaucrat operator--(int); // Post-decrement int getGrade() const; const std::string getName() const; void signForm(class Form &form); class GradeTooHighException : public std::exception { public: const char *what() const throw(); }; class GradeTooLowException : public std::exception { public: const char *what() const throw(); }; }; std::ostream &operator<<(std::ostream &os, const Bureaucrat &bureaucrat);