diff --git a/.gitignore b/.gitignore index ac6d036..9b911a2 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ Fixed open polymorphism *.replace +bureaucrat diff --git a/cpp05/ex00/Bureaucrat.cpp b/cpp05/ex00/Bureaucrat.cpp index 507576f..d097695 100644 --- a/cpp05/ex00/Bureaucrat.cpp +++ b/cpp05/ex00/Bureaucrat.cpp @@ -6,10 +6,89 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/16 14:49:52 by rparodi #+# #+# */ -/* Updated: 2025/03/16 14:51:22 by rparodi ### ########.fr */ +/* 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); +} diff --git a/cpp05/ex00/Bureaucrat.hpp b/cpp05/ex00/Bureaucrat.hpp index bbb330e..19b77e5 100644 --- a/cpp05/ex00/Bureaucrat.hpp +++ b/cpp05/ex00/Bureaucrat.hpp @@ -6,23 +6,38 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/16 14:48:33 by rparodi #+# #+# */ -/* Updated: 2025/03/16 14:52:32 by rparodi ### ########.fr */ +/* Updated: 2025/03/16 22:01:02 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #pragma once +#include #include +#include class Bureaucrat { public: Bureaucrat(void); + Bureaucrat(std::string name, u_int8_t grade); Bureaucrat(Bureaucrat const ©); Bureaucrat& operator=(Bureaucrat const &assign); ~Bureaucrat(void); std::string getName(void) const; - int getGrade(void) const; + u_int8_t getGrade(void) const; + class GradeTooHighException : public std::exception { + virtual const char *what() const throw() { + return ("Error:\n> Grade is too high (have to be lower than 1)"); + } + }; + class GradeTooLowException : public std::exception { + virtual const char *what() const throw() { + return ("Error:\n> Grade is too low (have to be higher than 150)"); + } + }; private: - std::string const _name; - int _grade; + std::string _name; + u_int8_t _grade; }; + +std::ostream& operator<<(std::ostream& os, Bureaucrat const &bureaucrat); diff --git a/cpp05/ex00/Makefile b/cpp05/ex00/Makefile index c4e5521..a604c96 100644 --- a/cpp05/ex00/Makefile +++ b/cpp05/ex00/Makefile @@ -12,7 +12,7 @@ # Variables # Name -NAME = polymorphism +NAME = bureaucrat # Commands CXX = c++ diff --git a/cpp05/ex00/main.cpp b/cpp05/ex00/main.cpp index 0f0c436..905d593 100644 --- a/cpp05/ex00/main.cpp +++ b/cpp05/ex00/main.cpp @@ -6,12 +6,16 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/03/16 14:47:26 by rparodi #+# #+# */ -/* Updated: 2025/03/16 14:48:29 by rparodi ### ########.fr */ +/* Updated: 2025/03/16 21:53:58 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "Bureaucrat.hpp" int main(void) { - + try { + Bureaucrat b1("Roger", 0); + } catch (std::exception & e) { + std::cerr << e.what() << std::endl; + } }