This commit is contained in:
Ladebeze66
2024-03-02 17:39:42 +01:00
parent 12ec1fdecc
commit c3a7af50b0
18 changed files with 575 additions and 39 deletions

21
cpp06/ex02/A.hpp Normal file
View File

@@ -0,0 +1,21 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* A.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:24:33 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 14:48:02 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef A_HPP
#define A_HPP
#include "Base.hpp"
class A: public Base
{};
#endif

21
cpp06/ex02/B.hpp Normal file
View File

@@ -0,0 +1,21 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* B.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:26:30 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 14:48:12 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef B_HPP
#define B_HPP
#include "Base.hpp"
class B: public Base
{};
#endif

22
cpp06/ex02/Base.hpp Normal file
View File

@@ -0,0 +1,22 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Base.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:23:13 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 15:02:16 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef BASE_HPP
#define BASE_HPP
class Base
{
public:
virtual ~Base() {};
};
#endif

21
cpp06/ex02/C.hpp Normal file
View File

@@ -0,0 +1,21 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* C.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:27:43 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 14:48:28 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef C_HPP
#define C_HPP
#include "Base.hpp"
class C: public Base
{};
#endif

61
cpp06/ex02/Makefile Normal file
View File

@@ -0,0 +1,61 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2023/12/27 20:57:42 by fgras-ca #+# #+# #
# Updated: 2024/02/27 14:47:25 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 = identify
SRC = Utils.cpp \
main.cpp \
CC = c++
CFLAGS = -Wall -Werror -Wextra -std=c++98
RM = rm -f
OBJS = ${SRC:.cpp=.o}
all : $(NAME)
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
$(NAME) : $(OBJS)
@echo "$(RED)Compilation fixed... $(DEF_COLOR)"
$(CC) $(CFLAGS) $(OBJS) -g -o $(NAME)
@echo "$(GREEN)Compilation complete. $(ORANGE)Type "./identify" 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

52
cpp06/ex02/Utils.cpp Normal file
View File

@@ -0,0 +1,52 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Utils.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:33:46 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 15:07:41 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#include "Utils.hpp"
#include "A.hpp"
#include "B.hpp"
#include "C.hpp"
#include <iostream>
#include <cstdlib>
#include <ctime>
Base* generate(void)
{
srand(static_cast<unsigned int>(time(NULL)));
int choice = rand() % 3;
switch (choice)
{
case 0: return new A();
case 1: return new B();
case 2: return new C();
}
return (NULL); // Par défaut, retourne NULL si aucun cas n'est sélectionné.
}
void identify(Base* p)
{
if (dynamic_cast<A*>(p)) std::cout << "A\n";
else if (dynamic_cast<B*>(p)) std::cout << "B\n";
else if (dynamic_cast<C*>(p)) std::cout << "C\n";
}
void identify(Base& p)
{
try {
(void)dynamic_cast<A&>(p); std::cout << "A\n"; return;
} catch (...) {}
try {
(void)dynamic_cast<B&>(p); std::cout << "B\n"; return;
} catch (...) {}
try {
(void)dynamic_cast<C&>(p); std::cout << "C\n"; return;
} catch (...) {}
}

38
cpp06/ex02/Utils.hpp Normal file
View File

@@ -0,0 +1,38 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Utils.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:31:48 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 15:05:19 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef UTILS_HPP
#define UTILS_HPP
#include "Base.hpp"
#include "A.hpp"
#include "B.hpp"
#include "C.hpp"
#include <iostream>
#include <cstdlib>
#include <ctime>
#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"
Base* generate(void);
void identify(Base* p);
void identify(Base& p);
#endif

43
cpp06/ex02/main.cpp Normal file
View File

@@ -0,0 +1,43 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: fgras-ca <fgras-ca@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/27 14:44:31 by fgras-ca #+# #+# */
/* Updated: 2024/02/27 15:14:37 by fgras-ca ### ########.fr */
/* */
/* ************************************************************************** */
#include "Utils.hpp"
#include <iostream>
int main()
{
Base* base = generate();
std::cout << RED << "Identify by pointer: " << RESET;
identify(base); // Identifier par pointeur
std::cout << RED << "Identify by reference: " << RESET;
identify(*base); // Identifier par référence
delete base; // Nettoyer la mémoire
A a;
B b;
C c;
std::cout << YELLOW << "\nDirect identification:" << RESET << std::endl;
std::cout << MAGENTA << "Identify A by reference: " << RESET;
identify(a);
std::cout << MAGENTA << "Identify B by reference: " << RESET;
identify(b);
std::cout << MAGENTA << "Identify C by reference: " << RESET;
identify(c);
return (0);
}