From ba3b88f0bf0de1363e2b83f7a8a637eca7b24959 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Thu, 24 Feb 2022 17:12:17 +0100 Subject: [PATCH] d04 ex00 --- d00/ex00/Makefile | 29 ++++++++++----- d00/ex00/megaphone | Bin 0 -> 17488 bytes d04/Animal.cpp | 46 ++++++++++++++++++++++++ d04/Animal.hpp | 28 +++++++++++++++ d04/Cat.cpp | 42 ++++++++++++++++++++++ d04/Cat.hpp | 27 ++++++++++++++ d04/Dog.cpp | 41 +++++++++++++++++++++ d04/Dog.hpp | 27 ++++++++++++++ d04/Makefile | 84 ++++++++++++++++++++++++++++++++++++++++++++ d04/WrongAnimal.cpp | 50 ++++++++++++++++++++++++++ d04/WrongAnimal.hpp | 26 ++++++++++++++ d04/WrongCat.cpp | 40 +++++++++++++++++++++ d04/WrongCat.hpp | 23 ++++++++++++ d04/main.cpp | 52 +++++++++++++++++++++++++++ d04/poly | Bin 0 -> 25640 bytes 15 files changed, 507 insertions(+), 8 deletions(-) create mode 100755 d00/ex00/megaphone create mode 100644 d04/Animal.cpp create mode 100644 d04/Animal.hpp create mode 100644 d04/Cat.cpp create mode 100644 d04/Cat.hpp create mode 100644 d04/Dog.cpp create mode 100644 d04/Dog.hpp create mode 100644 d04/Makefile create mode 100644 d04/WrongAnimal.cpp create mode 100644 d04/WrongAnimal.hpp create mode 100644 d04/WrongCat.cpp create mode 100644 d04/WrongCat.hpp create mode 100644 d04/main.cpp create mode 100755 d04/poly diff --git a/d00/ex00/Makefile b/d00/ex00/Makefile index 0803c5b..e512c07 100644 --- a/d00/ex00/Makefile +++ b/d00/ex00/Makefile @@ -6,8 +6,21 @@ NAME = megaphone -CC = c++ -CFLAGS = -Wall -Wextra -Werror $(INCLUDES) -std=c++98 +#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) @@ -22,11 +35,12 @@ D_SRCS = . SRCS = megaphone.cpp D_OBJS = builds -OBJS = $(SRCS:%.cpp=$(D_OBJS)/%.o) +OBJS = $(SRCS:%.$(EXT)=$(D_OBJS)/%.o) -RM_D_OBJS = rm -rf $(D_OBJS) ifeq "$(D_OBJS)" "." -RM_D_OBJS = + RM_OBJS = rm -f $(OBJS) +else + RM_OBJS = rm -rf $(D_OBJS) endif @@ -38,7 +52,7 @@ endif all: $(NAME) -$(D_OBJS)/%.o: %.cpp | $(D_OBJS) +$(D_OBJS)/%.o: %.$(EXT) | $(D_OBJS) $(CC) $(CFLAGS) -c $< -o $@ $(D_OBJS): @@ -50,11 +64,10 @@ $(NAME): $(OBJS) $(CC) $(OBJS) -o $@ $(LIBS) clean: - rm -f $(OBJS) + $(RM_OBJS) fclean: clean rm -f $(NAME) - $(RM_D_OBJS) re: fclean all diff --git a/d00/ex00/megaphone b/d00/ex00/megaphone new file mode 100755 index 0000000000000000000000000000000000000000..b2f63e0466af814b1b9bc69e3e8491ea2fab8a6f GIT binary patch literal 17488 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 +#include + +class Animal { + +public: + + Animal( void ); + Animal( Animal const & src ); + ~Animal( void ); + Animal & operator=( Animal const & rhs ); + + virtual void makeSound() const; + std::string getType() const; + +protected: + + std::string type; + +private: + +}; + +#endif + diff --git a/d04/Cat.cpp b/d04/Cat.cpp new file mode 100644 index 0000000..71212f1 --- /dev/null +++ b/d04/Cat.cpp @@ -0,0 +1,42 @@ +#include "Cat.hpp" + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +Cat::Cat() { + type = "cat"; + return; +} + +Cat::Cat( Cat const & src ) { + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +Cat::~Cat() { + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +Cat & Cat::operator=( Cat const & rhs ) { + Animal::operator=(rhs); + + return *this; +} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void Cat::makeSound() const { + std::cout << "*miaow*\n"; +} + diff --git a/d04/Cat.hpp b/d04/Cat.hpp new file mode 100644 index 0000000..0c7012e --- /dev/null +++ b/d04/Cat.hpp @@ -0,0 +1,27 @@ +#ifndef CAT_HPP +# define CAT_HPP + +# include "Animal.hpp" + +#include +#include + +class Cat : public Animal { + +public: + + Cat( void ); + Cat( Cat const & src ); + ~Cat( void ); + Cat & operator=( Cat const & rhs ); + + void makeSound() const; + +protected: + +private: + +}; + +#endif + diff --git a/d04/Dog.cpp b/d04/Dog.cpp new file mode 100644 index 0000000..dc4f62a --- /dev/null +++ b/d04/Dog.cpp @@ -0,0 +1,41 @@ +#include "Dog.hpp" + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +Dog::Dog() { + type = "dog"; + return; +} + +Dog::Dog( Dog const & src ) { + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +Dog::~Dog() { + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +Dog & Dog::operator=( Dog const & rhs ) { + Animal::operator=(rhs); + return *this; +} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void Dog::makeSound() const { + std::cout << "*woof*\n"; +} + diff --git a/d04/Dog.hpp b/d04/Dog.hpp new file mode 100644 index 0000000..6a977df --- /dev/null +++ b/d04/Dog.hpp @@ -0,0 +1,27 @@ +#ifndef DOG_HPP +# define DOG_HPP + +# include "Animal.hpp" + +# include +# include + +class Dog : public Animal { + +public: + + Dog( void ); + Dog( Dog const & src ); + ~Dog( void ); + Dog & operator=( Dog const & rhs ); + + void makeSound() const; + +protected: + +private: + +}; + +#endif + diff --git a/d04/Makefile b/d04/Makefile new file mode 100644 index 0000000..50eca1c --- /dev/null +++ b/d04/Makefile @@ -0,0 +1,84 @@ +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # +# . name = value \ . += append to a variable # +# VARIABLES . value . != set result of command # +# . name is case sensitive . ?= set if not already set # +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # + +NAME = poly + +#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 \ + Animal.cpp \ + Dog.cpp \ + Cat.cpp \ + WrongAnimal.cpp \ + WrongCat.cpp + +D_HEADERS = . +HEADERS = Animal.hpp \ + Dog.hpp \ + Cat.hpp \ + WrongAnimal.hpp \ + WrongCat.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/d04/WrongAnimal.cpp b/d04/WrongAnimal.cpp new file mode 100644 index 0000000..61928ff --- /dev/null +++ b/d04/WrongAnimal.cpp @@ -0,0 +1,50 @@ +#include "WrongAnimal.hpp" + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +WrongAnimal::WrongAnimal() { + type = "wrong_animal"; + return; +} + +WrongAnimal::WrongAnimal( WrongAnimal const & src ) { + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +WrongAnimal::~WrongAnimal() { + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +WrongAnimal & WrongAnimal::operator=( WrongAnimal const & rhs ) { + if ( this != &rhs ) + { + type = rhs.getType(); + } + return *this; +} + +/********************************************* + * ACCESSORS + *********************************************/ + +std::string WrongAnimal::getType() const {return type;} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void WrongAnimal::makeSound() const { + std::cout << "*sound*\n"; +} + diff --git a/d04/WrongAnimal.hpp b/d04/WrongAnimal.hpp new file mode 100644 index 0000000..8dd40db --- /dev/null +++ b/d04/WrongAnimal.hpp @@ -0,0 +1,26 @@ +#ifndef WRONG_ANIMAL_HPP +# define WRONG_ANIMAL_HPP + +#include +#include + +class WrongAnimal { + +public: + + WrongAnimal( void ); + WrongAnimal( WrongAnimal const & src ); + ~WrongAnimal( void ); + WrongAnimal & operator=( WrongAnimal const & rhs ); + + void makeSound() const; + std::string getType() const; + +protected: + + std::string type; + +}; + +#endif + diff --git a/d04/WrongCat.cpp b/d04/WrongCat.cpp new file mode 100644 index 0000000..8d13eef --- /dev/null +++ b/d04/WrongCat.cpp @@ -0,0 +1,40 @@ +#include "WrongCat.hpp" + +/********************************************* + * CONSTRUCTORS + *********************************************/ + +WrongCat::WrongCat() { + type = "wrong_cat"; + return; +} + +WrongCat::WrongCat( WrongCat const & src ) { + *this = src; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ + +WrongCat::~WrongCat() { + return; +} + +/********************************************* + * OPERATORS + *********************************************/ + +WrongCat & WrongCat::operator=( WrongCat const & rhs ) { + WrongAnimal::operator=(rhs); + return *this; +} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void WrongCat::makeSound() const { + std::cout << "*miaow*\n"; +} diff --git a/d04/WrongCat.hpp b/d04/WrongCat.hpp new file mode 100644 index 0000000..158267d --- /dev/null +++ b/d04/WrongCat.hpp @@ -0,0 +1,23 @@ +#ifndef WRONG_CAT_HPP +# define WRONG_CAT_HPP + +# include "WrongAnimal.hpp" + +#include +#include + +class WrongCat : public WrongAnimal { + +public: + + WrongCat( void ); + WrongCat( WrongCat const & src ); + ~WrongCat( void ); + WrongCat & operator=( WrongCat const & rhs ); + + void makeSound() const; + +}; + +#endif + diff --git a/d04/main.cpp b/d04/main.cpp new file mode 100644 index 0000000..672ad4a --- /dev/null +++ b/d04/main.cpp @@ -0,0 +1,52 @@ +#include "Animal.hpp" +#include "Dog.hpp" +#include "Cat.hpp" +#include "WrongAnimal.hpp" +#include "WrongCat.hpp" + +#include +#include + +int main() { + const Animal* meta = new Animal(); + const Animal* j = new Dog(); + const Animal* i = new Cat(); + std::cout << j->getType() << " " << std::endl; + std::cout << i->getType() << " " << std::endl; + i->makeSound(); //will output the cat sound! + j->makeSound(); + meta->makeSound(); + + { + std::cout << std::endl; + const Cat* i = new Cat(); + const Animal* j = new Cat(); + std::cout << j->getType() << " " << std::endl; + std::cout << i->getType() << " " << std::endl; + i->makeSound(); //will output the cat sound! + j->makeSound(); + } + + { + std::cout << std::endl; + const WrongAnimal* i = new WrongAnimal(); + const WrongAnimal* j = new WrongCat(); + std::cout << i->getType() << " " << std::endl; + std::cout << j->getType() << " " << std::endl; + i->makeSound(); //will output the cat sound! + j->makeSound(); + } + + { + std::cout << std::endl; + const WrongCat* i = new WrongCat(); + const WrongAnimal* j = new WrongCat(); + std::cout << j->getType() << " " << std::endl; + std::cout << i->getType() << " " << std::endl; + i->makeSound(); //will output the cat sound! + j->makeSound(); + } + + return 0; +} + diff --git a/d04/poly b/d04/poly new file mode 100755 index 0000000000000000000000000000000000000000..386c7e6c35363c010f616c104cba1a6da8bd6a2e GIT binary patch literal 25640 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 D1pyaA literal 0 HcmV?d00001