/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Bureaucrat.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/16 14:49:52 by rparodi #+# #+# */ /* Updated: 2025/03/16 22:00:36 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "Bureaucrat.hpp" #include #include /** * @brief Constructor by default of Bureaucrat */ Bureaucrat::Bureaucrat(void) : _name("Roger"), _grade(150) { std::cout << "[Bureaucrat] Default constructor called" << std::endl; } /** * @brief Better constructor easier to test * * @param name the name of the Bureaucrat * @param grade grade to start the carreer */ Bureaucrat::Bureaucrat(std::string name, u_int8_t grade) : _name(name) { std::cout << "[Bureaucrat] Smart constructor called" << std::endl; if (grade < 1) { throw GradeTooHighException(); } else if (grade > 150) { throw GradeTooLowException(); } else { this->_grade = grade; } } Bureaucrat::Bureaucrat(Bureaucrat const & copy) : _name(copy._name), _grade(copy._grade) { std::cout << "[Bureaucrat] Copy constructor called" << std::endl; } /** * @brief Constructor with the operator '=' (Overload) * * @param assign Bureaucrat to copie * @return It's a constructor */ Bureaucrat& Bureaucrat::operator=(Bureaucrat const & assign) { std::cout << "[Bureaucrat] Assign constructor called" << std::endl; this->_grade = assign._grade; this->_name = assign._name; return *this; } /** * @brief Destructor for the Bureaucrat */ Bureaucrat::~Bureaucrat() { std::cout << "[Bureaucrat] Desctuctor called" << std::endl; } /** * @brief Getter for the grade * * @return grade (unsigned int 8bits) */ u_int8_t Bureaucrat::getGrade() const { return (this->_grade); } /** * @brief Getter for the name * * @return name (string from standard) */ std::string Bureaucrat::getName() const { return (this->_name); } /** * @brief Overload of the '<<' operator to print * * @param output previous output * @param toPrint Bureaucrat to print * @return the output with the Bureaucrat */ std::ostream& operator<<(std::ostream& output, Bureaucrat const &toPrint) { output << toPrint.getName() << ", bureaucrat grade " << toPrint.getGrade() << "."; return (output); }