void Bureaucrat::signForm( Form & form ) const { try { bool wasSigned = form.getWasSigned(); form.beSigned(*this); std::cout << "Bureaucrat " << name << " (Grade " << grade << ") signs a " << form.getName() << " (s.grade " << form.getRequirementSign() << ", ex.grade " << form.getRequirementExec() << ")"; if (wasSigned) std::cout << " (Signed)." << std::endl; else std::cout << " (Unsigned)." << std::endl; } catch (Form::GradeTooLowException) { std::cout << "Bureaucrat " << name << " cannot sign " << form.getName() << " because his grade is too low (His grade is " << grade << " but should be at least " << form.getRequirementSign() << ")." << std::endl; } catch (std::exception) { std::cout << "Bureaucrat " << name << " cannot sign " << form.getName() << " because of an unknown reason." << std::endl; } }