Something went wrong. Try again.
Java--'s try/catch projects.intra.42.fr/projects/cpp-module-05
Something went wrong. Try again.
2.1 kB · 81 lines
C++
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include <Bureaucrat.hpp>#include <Form.hpp>
Bureaucrat::Bureaucrat() : name("Franck Leboeuf") { std::cout << "Bureaucrat default constructor called" << std::endl; setGrade(150);}
Bureaucrat::Bureaucrat(const Bureaucrat& other) : name(other.name), grade(other.grade) { std::cout << "Bureaucrat copy constructor called" << std::endl;}
Bureaucrat::Bureaucrat(const std::string& name) : name(name) { std::cout << "Bureaucrat (name) constructor called" << std::endl; setGrade(150);}
Bureaucrat::Bureaucrat(const std::string& name, const unsigned short grade) : name(name) { std::cout << "Bureaucrat (name, grade) constructor called" << std::endl; setGrade(grade);}
void Bureaucrat::incrementGrade() { std::cout << "Increment grade called" << std::endl; setGrade(grade - 1);}
void Bureaucrat::decrementGrade() { std::cout << "Decrement grade called" << std::endl; setGrade(grade + 1);}
void Bureaucrat::signForm(Form& form) { if (form.getIsSigned()) { std::cout << name << " couldn't sign " << form.getName() << " because it is already signed" << std::endl; return; }
try { form.beSigned(*this); std::cout << name << " signed " << form.getName() << std::endl; } catch (const std::exception& exception) { std::cout << name << " couldn't sign " << form.getName() << " because " << exception.what() << std::endl; }}
const std::string& Bureaucrat::getName() const { return name;}
unsigned short Bureaucrat::getGrade() const { return grade;}
Bureaucrat& Bureaucrat::operator=(const Bureaucrat& other) { std::cout << "Bureaucrat assignment operator called" << std::endl;
if (this != &other) grade = other.grade;
return *this;}
Bureaucrat::~Bureaucrat() { std::cout << "Bureaucrat destructor called" << std::endl;}
void Bureaucrat::setGrade(const unsigned short grade) { if (grade > 150) throw GradeTooLowException();
if (grade < 1) throw GradeTooHighException();
this->grade = grade;}
std::ostream& operator<<(std::ostream& ostream, const Bureaucrat& bureaucrat) { ostream << bureaucrat.getName() << ", bureaucrat grade " << bureaucrat.getGrade() << "."; return ostream;}