mirror of
https://github.com/Ladebeze66/cpp-partie-2.git
synced 2026-11-09 13:47:14 +01:00
ex06
This commit is contained in:
21
cpp06/ex02/A.hpp
Normal file
21
cpp06/ex02/A.hpp
Normal 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
21
cpp06/ex02/B.hpp
Normal 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
22
cpp06/ex02/Base.hpp
Normal 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
21
cpp06/ex02/C.hpp
Normal 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
61
cpp06/ex02/Makefile
Normal 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
52
cpp06/ex02/Utils.cpp
Normal 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
38
cpp06/ex02/Utils.hpp
Normal 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
43
cpp06/ex02/main.cpp
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user