From 7abaa2a2947b59746243908439a37a0fca7ee567 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Sun, 6 Mar 2022 21:50:26 +0100 Subject: [PATCH] d06 ex02 --- d06/ex02/Makefile | 75 ++++++++++++++++++++++++++++++++++ d06/ex02/dynamic | Bin 0 -> 19504 bytes d06/ex02/headers/Classes.hpp | 14 +++++++ d06/ex02/main.cpp | 77 +++++++++++++++++++++++++++++++++++ 4 files changed, 166 insertions(+) create mode 100644 d06/ex02/Makefile create mode 100755 d06/ex02/dynamic create mode 100644 d06/ex02/headers/Classes.hpp create mode 100644 d06/ex02/main.cpp diff --git a/d06/ex02/Makefile b/d06/ex02/Makefile new file mode 100644 index 0000000..dcfe758 --- /dev/null +++ b/d06/ex02/Makefile @@ -0,0 +1,75 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value \ . += append to a variable # +# VARIABLES . value . != set result of command # +# . name is case sensitive . ?= set if not already set # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = dynamic + +#TYPE = c +TYPE = cpp + +ifeq "$(TYPE)" "c" + CC = c + EXT = c +else ifeq "$(TYPE)" "cpp" + CC = c++ + EXT = cpp +endif + +CFLAGS = -Wall -Wextra -Werror $(INCLUDES) +ifeq "$(TYPE)" "cpp" + CFLAGS += -std=c++98 +endif + +VPATH = $(D_SRCS) + +LIBS = + +INCLUDES = -I$(D_HEADERS) + +D_SRCS = . +SRCS = main.cpp + +D_HEADERS = headers +HEADERS = Classes.hpp + +D_OBJS = builds +OBJS = $(SRCS:%.$(EXT)=$(D_OBJS)/%.o) + +ifeq "$(D_OBJS)" "." + RM_OBJS = rm -f $(OBJS) +else + RM_OBJS = rm -rf $(D_OBJS) +endif + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . target: prerequisites . $@ : target # +# RULES . recipe . $< : 1st prerequisite # +# . recipe . $^ : all prerequisites # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +all: $(NAME) + +$(D_OBJS)/%.o: %.$(EXT) | $(D_OBJS) + $(CC) $(CFLAGS) -c $< -o $@ + +$(D_OBJS): + mkdir $@ + +$(OBJS): $(HEADERS:%=$(D_HEADERS)/%) + +$(NAME): $(OBJS) + $(CC) $(OBJS) -o $@ $(LIBS) + +clean: + $(RM_OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY : all clean fclean re + diff --git a/d06/ex02/dynamic b/d06/ex02/dynamic new file mode 100755 index 0000000000000000000000000000000000000000..b572a320cc044d43262c6f00b2196a07a4111e5b GIT binary patch literal 19504 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 d@ZR9SD<;>=va~0VPJdISAwm1|=4301{{ +#include +#include + +#include "Classes.hpp" + +Base * generate() { + Base *base; + + srand (time(NULL)); + int i = rand() % 3; + + if (i == 0) + { + std::cout << "A\n"; + base = new A(); + } + else if (i == 1) + { + std::cout << "B\n"; + base = new B(); + } + else + { + std::cout << "C\n"; + base = new C(); + } + + return base; +} + +void identify(Base* p) { + A * a; + B * b; + C * c; + + a = dynamic_cast(p); + if ( a != NULL) + std::cout << "A\n"; + b = dynamic_cast(p); + if ( b != NULL) + std::cout << "B\n"; + c = dynamic_cast(p); + if ( c != NULL) + std::cout << "C\n"; +} + +void identify(Base& p) { + Base base; + try { + base = dynamic_cast(p); + std::cout << " "; + } + catch ( std::exception ) {std::cout << " ";} + try { + base = dynamic_cast(p); + std::cout << " "; + } + catch ( std::exception ) {std::cout << " ";} + try { + base = dynamic_cast(p); + std::cout << " "; + } + catch ( std::exception ) {std::cout << " ";} + std::cout << "\n"; +} + +int main() { + + Base *base = generate(); + + identify(base); + identify(*base); + + delete base; + return 0; +}