This commit is contained in:
2024-02-11 18:36:44 +01:00
commit 04480a56eb
20 changed files with 1288 additions and 0 deletions

60
cpp05/ex00/Bureaucrat.cpp Normal file
View File

@@ -0,0 +1,60 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Bureaucrat.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/11 13:16:26 by fgras-ca #+# #+# */
/* Updated: 2024/02/11 13:58:43 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#include "Bureaucrat.hpp"
Bureaucrat::Bureaucrat(const std::string &nom, int grade) : name(nom)
{
if (grade < 1)
{
throw GradeTooHighException();
}
else if (grade > 150)
{
throw GradeTooLowException();
}
this->grade = grade;
}
std::string Bureaucrat::getName() const
{
return (name);
}
int Bureaucrat::getGrade() const
{
return (grade);
}
void Bureaucrat::incrementGrade()
{
if (grade <= 1)
{
throw GradeTooHighException();
}
--grade;
}
void Bureaucrat::decrementGrade()
{
if (grade >= 150)
{
throw GradeTooLowException();
}
++grade;
}
std::ostream& operator<<(std::ostream &os, const Bureaucrat &bureaucrat)
{
os << bureaucrat.getName() << MAGENTA << ", bureaucrat grade " << RESET << bureaucrat.getGrade();
return (os);
}

69
cpp05/ex00/Bureaucrat.hpp Normal file
View File

@@ -0,0 +1,69 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Bureaucrat.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/11 12:57:28 by fgras-ca #+# #+# */
/* Updated: 2024/02/11 14:01:58 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef BUREAUCRAT_HPP
#define BUREAUCRAT_HPP
#include <string>
#include <exception>
#include <iostream>
#define RESET "\033[0m"
#define BLACK "\033[30m"
#define RED "\033[31m"
#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define BLUE "\033[34m"
#define MAGENTA "\033[35m"
#define CYAN "\033[36m"
#define WHITE "\033[37m"
class Bureaucrat
{
public:
class GradeTooHighException : public std::exception
{
public:
const char* what() const throw() override
{
return ("Grade trop élevé");
}
};
class GradeTooLowException : public std::exception
{
public:
const char* what() const throw() override
{
return ("Grade trop bas");
}
};
private:
const std::string name;
int grade;
public:
Bureaucrat(const std::string &nom, int grade); // Constructeur
Bureaucrat(const Bureaucrat& other) = default; // Constructeur par copie
Bureaucrat& operator=(const Bureaucrat& other) = default; // Opérateur d'affectation
~Bureaucrat() = default; // Destructeur
std::string getName() const;
int getGrade() const;
void incrementGrade();
void decrementGrade();
};
std::ostream& operator<<(std::ostream &os, const Bureaucrat &bureaucrat);
#endif

59
cpp05/ex00/Makefile Normal file
View File

@@ -0,0 +1,59 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2023/12/27 20:57:42 by fgras-ca #+# #+# #
# Updated: 2024/02/11 13:37:27 by fgras-ca ### ########.fr #
# #
# **************************************************************************** #
LOGO = @echo "🅻🅰🅳🅴🅱🅴🆉🅴";\
DEF_COLOR = \033[0m
GRAY = \033[0;90m
RED = \033[0;91m
GREEN = \033[0;92m
YELLOW = \033[0;93m
BLUE = \033[0;94m
MAGENTA = \033[0;95m
CYAN = \033[0;96m
WHITE = \033[0;97m
ORANGE = \033[38;5;214m
NAME = Bureaucrat
SRC = Bureaucrat.cpp \
main.cpp \
OBJS = ${SRC:.cpp=.o}
CC = c++
CFLAGS = -Wall -Werror -Wextra -std=c++98
RM = rm -f
all : $(NAME)
$(NAME) : $(OBJS)
@echo "$(RED)Compilation fixed... $(DEF_COLOR)"
$(CC) $(CFLAGS) $(OBJS) -g -o $(NAME)
@echo "$(GREEN)Compilation complete. $(ORANGE)Type "./Bureaucrat" to execute the program!!$(DEF_COLOR)"
$(LOGO)
clean :
@echo "$(RED)Deleating files objects... $(DEF_COLOR)"
$(RM) $(OBJS)
@echo "$(GREEN)files deleted!! $(DEF_COLOR)"
$(LOGO)
fclean : clean
@echo "$(RED)Delete program name... $(DEF_COLOR)"
$(RM) $(NAME)
@echo "$(GREEN)File program deleted!! $(DEF_COLOR)"
$(LOGO)
re : fclean all
.PHONY : all clean fclean re

View File

@@ -0,0 +1,94 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# introduction.txt :+: :+: :+: #
# +:+ +:+ +:+ #
# By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2024/02/10 15:12:35 by fgras-ca #+# #+# #
# Updated: 2024/02/11 12:30:48 by fgras-ca ### ########.fr #
# #
# **************************************************************************** #
** Chapitre I
** Introduction
** Le C++ est un langage de programmation polyvalent créé par Bjarne Stroustrup
** comme une extension du langage de programmation C, ou "C avec Classes"
** (source : Wikipedia).
** L'objectif de ces modules est de vous introduire à la Programmation Orientée Objet.
** Ce sera le point de départ de votre voyage en C++. De nombreux langages sont recommandés
** pour apprendre la POO. Nous avons décidé de choisir le C++ puisqu'il est dérivé
** de votre vieux ami le C.
** Comme il s'agit d'un langage complexe, et afin de garder les choses simples,
** votre code sera conforme à la norme C++98.
** Nous sommes conscients que le C++ moderne est très différent sous de nombreux aspects.
** Donc, si vous voulez devenir un développeur C++ compétent, c'est à vous d'aller
** plus loin après le 42 Core Commun !
*/
** Chapitre II
** Règles générales
** Compilation
** • Compilez votre code avec c++ et les drapeaux -Wall -Wextra -Werror
** • Votre code doit encore compiler si vous ajoutez le drapeau -std=c++98
**
** Formatage et conventions de nommage
** • Les répertoires d'exercices seront nommés de cette façon : ex00, ex01, ..., exn
** • Nommez vos fichiers, classes, fonctions, fonctions membres et attributs comme
** requis dans les directives.
** • Écrivez les noms des classes en format UpperCamelCase. Les fichiers contenant
** le code des classes seront toujours nommés selon le nom de la classe. Par exemple :
** ClassName.hpp/ClassName.h, ClassName.cpp, ou ClassName.tpp. Ainsi, si vous avez
** un fichier d'en-tête contenant la définition d'une classe "BrickWall" représentant
** un mur de briques, son nom sera BrickWall.hpp.
** • Sauf indication contraire, tous les messages de sortie doivent se terminer par un
** caractère de nouvelle ligne et être affichés sur la sortie standard.
** • Adieu Norminette ! Aucun style de codage n'est imposé dans les modules C++.
** Vous pouvez suivre celui que vous préférez. Mais gardez à l'esprit qu'un code que
** vos pairs évaluateurs ne peuvent pas comprendre est un code qu'ils ne peuvent pas
** noter. Faites de votre mieux pour écrire un code propre et lisible.
**
** Autorisé/Interdit
** Vous ne codez plus en C. Il est temps de passer au C++ ! Par conséquent :
** • Vous êtes autorisé à utiliser presque tout de la bibliothèque standard. Ainsi,
** au lieu de vous en tenir à ce que vous connaissez déjà, il serait intelligent
** d'utiliser autant que possible les versions C++ des fonctions C auxquelles vous
** êtes habitué.
** • Cependant, vous ne pouvez pas utiliser d'autres bibliothèques externes. Cela
** signifie que les bibliothèques C++11 (et formes dérivées) et Boost sont interdites.
** Les fonctions suivantes sont également interdites : *printf(), *alloc() et free().
** Si vous les utilisez, votre note sera de 0 et c'est tout. Notez que, sauf mention
** explicite du contraire, l'utilisation des mots-clés using namespace <ns_name> et
** friend est interdite. Sinon, votre note sera de -42.
** • Vous êtes autorisé à utiliser la STL dans les modules 08 et 09 uniquement. Cela
** signifie : pas de Conteneurs (vector/list/map/etc.) et pas d'Algorithmes (tout ce
** qui nécessite d'inclure l'en-tête <algorithm>) jusqu'à ce moment. Sinon, votre
** note sera de -42.
**
** Quelques exigences de conception
** • Les fuites de mémoire se produisent aussi en C++. Lorsque vous allouez de la
** mémoire (en utilisant le mot-clé new), vous devez éviter les fuites de mémoire.
** • Du module 02 au module 09, vos classes doivent être conçues selon la Forme
** Canonique Orthodoxe, sauf indication contraire explicite.
** • Toute implémentation de fonction mise dans un fichier d'en-tête (sauf pour les
** modèles de fonction) signifie 0 pour l'exercice.
** • Vous devriez être capable d'utiliser chacun de vos en-têtes indépendamment des
** autres. Ainsi, ils doivent inclure toutes les dépendances dont ils ont besoin.
** Cependant, vous devez éviter le problème de double inclusion en ajoutant des
** gardes d'inclusion. Sinon, votre note sera de 0.
**
** Lisez-moi
** • Vous pouvez ajouter des fichiers supplémentaires si vous en avez besoin (c'est-à-dire,
** pour diviser votre code). Comme ces devoirs ne sont pas vérifiés par un programme,
** n'hésitez pas à le faire tant que vous remettez les fichiers obligatoires.
** • Parfois, les directives d'un exercice semblent courtes mais les exemples peuvent
** montrer des exigences qui ne sont pas explicitement écrites dans les instructions.
** • Lisez chaque module complètement avant de commencer ! Vraiment, faites-le.
** • Par Odin, par Thor ! Utilisez votre cerveau !!!
** Vous devrez implémenter beaucoup de classes. Cela peut sembler fastidieux,
** à moins que vous ne soyez capable de scripter votre éditeur de texte préféré.
** Une certaine liberté vous est donnée pour compléter les exercices.
** Cependant, suivez les règles obligatoires et ne soyez pas paresseux. Vous
** manqueriez beaucoup d'informations utiles ! N'hésitez pas à lire sur les
** concepts théoriques.
*/

43
cpp05/ex00/main.cpp Normal file
View File

@@ -0,0 +1,43 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/11 13:28:49 by fgras-ca #+# #+# */
/* Updated: 2024/02/11 14:08:26 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#include "Bureaucrat.hpp"
int main()
{
try
{
Bureaucrat bob("Bob", 2);
std::cout << bob << std::endl;
bob.incrementGrade();
std::cout << bob << std::endl;
bob.incrementGrade(); // Devrait lancer une exception
}
catch (const std::exception& e)
{
std::cerr<< RED << e.what() << RESET << std::endl;
}
try
{
Bureaucrat jim("Jim", 149);
std::cout << jim << std::endl;
jim.decrementGrade();
std::cout << jim << std::endl;
jim.decrementGrade(); // Devrait lancer une exception
}
catch (const std::exception& e)
{
std::cerr << RED << e.what() << RESET << std::endl;
}
return (0);
}