From 452e6bfa7bb4bca75dc4659bf9d707101b411977 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Tue, 17 Nov 2020 19:02:35 +0100 Subject: Added cpp05/ex02 main, Added cpp05/ex03 --- cpp05/ex03/Bureaucrat.cpp | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 cpp05/ex03/Bureaucrat.cpp (limited to 'cpp05/ex03/Bureaucrat.cpp') diff --git a/cpp05/ex03/Bureaucrat.cpp b/cpp05/ex03/Bureaucrat.cpp new file mode 100644 index 0000000..64bbd25 --- /dev/null +++ b/cpp05/ex03/Bureaucrat.cpp @@ -0,0 +1,127 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Bureaucrat.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 18:08:13 by charles #+# #+# */ +/* Updated: 2020/11/17 13:37:49 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Bureaucrat.hpp" + +Bureaucrat::Bureaucrat(Bureaucrat const& other) { *this = other; } + +Bureaucrat& Bureaucrat::operator=(Bureaucrat const& other) +{ + m_name = other.m_name; + m_grade = other.m_grade; + return *this; +} + +Bureaucrat::~Bureaucrat() {} + +Bureaucrat::Bureaucrat(std::string const& name, int grade) + : m_name(name), m_grade(grade) +{ + checkGrade(); +} + +std::string const& Bureaucrat::getName() const { return m_name; } +int Bureaucrat::getGrade() const { return m_grade; } + +void Bureaucrat::incrementGrade() +{ + m_grade--; + checkGrade(); +} + +void Bureaucrat::decrementGrade() +{ + m_grade++; + checkGrade(); +} + +void Bureaucrat::signForm(Form& form) +{ + try + { + form.beSigned(*this); + std::cout << m_name << " signs " << form.getName() << std::endl; + } + catch (std::exception &e) + { + std::cout << m_name << " cannot sign " << form.getName() << " " << e.what() << std::endl; + } +} + +void Bureaucrat::executeForm(Form& form) +{ + try + { + form.execute(*this); + std::cout << m_name << " executes " << form.getName() << std::endl; + } + catch (std::exception &e) + { + std::cout << m_name << " cannot execute " << form.getName() << " " << e.what() << std::endl; + } +} + +void Bureaucrat::checkGrade() +{ + if (m_grade > 150) + throw Bureaucrat::GradeTooLowException(); + if (m_grade < 1) + throw Bureaucrat::GradeTooHighException(); +} + +std::ostream& operator<<(std::ostream& out, Bureaucrat const& b) +{ + std::cout << b.getName() << ", bureaucrat grade " << b.getGrade() << std::endl; + return out; +} + +/////////////////////////////////////////////////////////////////////////////// +// Exception grade too high +/////////////////////////////////////////////////////////////////////////////// + +Bureaucrat::GradeTooHighException::GradeTooHighException() : std::exception() {} + +Bureaucrat::GradeTooHighException::GradeTooHighException(GradeTooHighException const& other) + : std::exception(other) {} + +Bureaucrat::GradeTooHighException& +Bureaucrat::GradeTooHighException::operator=(GradeTooHighException const& other) +{ + std::exception::operator=(other); + return *this; +} + +Bureaucrat::GradeTooHighException::~GradeTooHighException() throw() {} + +char const* Bureaucrat::GradeTooHighException::what() const throw() { return "Grade is too high"; } + +/////////////////////////////////////////////////////////////////////////////// +// Exception grade too low +/////////////////////////////////////////////////////////////////////////////// + +Bureaucrat::GradeTooLowException::GradeTooLowException() : std::exception() {} + +Bureaucrat::GradeTooLowException::GradeTooLowException(GradeTooLowException const& other) + : std::exception(other) {} + +Bureaucrat::GradeTooLowException& +Bureaucrat::GradeTooLowException::operator=(GradeTooLowException const& other) +{ + std::exception::operator=(other); + return *this; +} + +Bureaucrat::GradeTooLowException::~GradeTooLowException() throw() {} + +char const* Bureaucrat::GradeTooLowException::what() const throw() { return "Grade is too low"; } + +Bureaucrat::Bureaucrat() {} -- cgit