ex00: it works!
This commit is contained in:
commit
6d4b5788d7
16 changed files with 318 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
*.o
|
||||||
|
*.d
|
||||||
|
.cache
|
||||||
|
compile_commands.json
|
||||||
1
ex00/.gitignore
vendored
Normal file
1
ex00/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
ex00
|
||||||
29
ex00/Animal.cpp
Normal file
29
ex00/Animal.cpp
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include "Animal.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
Animal::Animal() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
|
||||||
|
|
||||||
|
Animal::Animal(const Animal &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
type = other.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
Animal::~Animal() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
|
||||||
|
|
||||||
|
Animal &Animal::operator=(const Animal &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
this->type = other.type;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Animal::getType() const { return type; }
|
||||||
|
|
||||||
|
void Animal::makeSound() const {
|
||||||
|
if (type == "Cat") {
|
||||||
|
std::cout << "[Meow]" << std::endl;
|
||||||
|
} else if (type == "Dog") {
|
||||||
|
std::cout << "[Bark]" << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "[Generic Animal Sound]" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
20
ex00/Animal.hpp
Normal file
20
ex00/Animal.hpp
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef ANIMAL_HPP
|
||||||
|
#define ANIMAL_HPP
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class Animal {
|
||||||
|
public:
|
||||||
|
Animal();
|
||||||
|
Animal(const Animal &other);
|
||||||
|
~Animal();
|
||||||
|
Animal &operator=(const Animal &other);
|
||||||
|
|
||||||
|
std::string getType() const;
|
||||||
|
void makeSound() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::string type;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
20
ex00/Cat.cpp
Normal file
20
ex00/Cat.cpp
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include "Cat.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
Cat::Cat() {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
type = "Cat";
|
||||||
|
}
|
||||||
|
|
||||||
|
Cat::Cat(const Cat &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
this->type = other.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
Cat::~Cat() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
|
||||||
|
|
||||||
|
Cat &Cat::operator=(const Cat &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
this->type = other.type;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
14
ex00/Cat.hpp
Normal file
14
ex00/Cat.hpp
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef CAT_HPP
|
||||||
|
#define CAT_HPP
|
||||||
|
|
||||||
|
#include "Animal.hpp"
|
||||||
|
|
||||||
|
class Cat : public Animal {
|
||||||
|
public:
|
||||||
|
Cat();
|
||||||
|
Cat(const Cat &other);
|
||||||
|
~Cat();
|
||||||
|
Cat &operator=(const Cat &other);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
20
ex00/Dog.cpp
Normal file
20
ex00/Dog.cpp
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include "Dog.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
Dog::Dog() {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
type = "Dog";
|
||||||
|
}
|
||||||
|
|
||||||
|
Dog::Dog(const Dog &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
this->type = other.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dog::~Dog() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
|
||||||
|
|
||||||
|
Dog &Dog::operator=(const Dog &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
this->type = other.type;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
14
ex00/Dog.hpp
Normal file
14
ex00/Dog.hpp
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef DOG_HPP
|
||||||
|
#define DOG_HPP
|
||||||
|
|
||||||
|
#include "Animal.hpp"
|
||||||
|
|
||||||
|
class Dog : public Animal {
|
||||||
|
public:
|
||||||
|
Dog();
|
||||||
|
Dog(const Dog &other);
|
||||||
|
~Dog();
|
||||||
|
Dog &operator=(const Dog &other);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
49
ex00/Makefile
Normal file
49
ex00/Makefile
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
NAME = ex00
|
||||||
|
ifeq ($(CPPFLAGS),)
|
||||||
|
CPPFLAGS = -Wall -Wextra -Werror -std=c++98 -ggdb -fsanitize=address,undefined
|
||||||
|
endif
|
||||||
|
ifeq ($(CXX),)
|
||||||
|
CXX = c++
|
||||||
|
endif
|
||||||
|
# g++ is the default on 42 computers
|
||||||
|
ifeq ($(CXX),g++)
|
||||||
|
CXX = c++
|
||||||
|
endif
|
||||||
|
srcs = \
|
||||||
|
Animal.cpp \
|
||||||
|
Cat.cpp \
|
||||||
|
Dog.cpp \
|
||||||
|
WrongAnimal.cpp \
|
||||||
|
WrongDog.cpp \
|
||||||
|
WrongCat.cpp \
|
||||||
|
|
||||||
|
main_objs = main.o $(srcs:.cpp=.o)
|
||||||
|
all_objs = $(main_objs)
|
||||||
|
deps = $(all_objs:.o=.d)
|
||||||
|
|
||||||
|
.PHONY: all clean fclean re run
|
||||||
|
|
||||||
|
all: $(NAME)
|
||||||
|
|
||||||
|
-include $(deps)
|
||||||
|
|
||||||
|
$(NAME): $(main_objs)
|
||||||
|
$(CXX) $(CPPFLAGS) -o $@ $^
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
$(CXX) -c $(CPPFLAGS) -o $*.o $*.cpp
|
||||||
|
$(CXX) -MM $(CPPFLAGS) -MT $*.o $*.cpp > $*.d
|
||||||
|
|
||||||
|
clean:
|
||||||
|
find . -name '*.o' -print -delete
|
||||||
|
find . -name '*.d' -print -delete
|
||||||
|
|
||||||
|
fclean: clean
|
||||||
|
rm -f $(NAME)
|
||||||
|
|
||||||
|
re:
|
||||||
|
+make fclean
|
||||||
|
+make all
|
||||||
|
|
||||||
|
run: $(NAME)
|
||||||
|
./$(NAME)
|
||||||
29
ex00/WrongAnimal.cpp
Normal file
29
ex00/WrongAnimal.cpp
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include "WrongAnimal.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
WrongAnimal::WrongAnimal() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
|
||||||
|
|
||||||
|
WrongAnimal::WrongAnimal(const WrongAnimal &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
type = other.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
WrongAnimal::~WrongAnimal() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
|
||||||
|
|
||||||
|
WrongAnimal &WrongAnimal::operator=(const WrongAnimal &other) {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
this->type = other.type;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string WrongAnimal::getType() const { return type; }
|
||||||
|
|
||||||
|
void WrongAnimal::makeSound() const {
|
||||||
|
if (type == "WrongCat") {
|
||||||
|
std::cout << "[Eldritch Meow]" << std::endl;
|
||||||
|
} else if (type == "WrongDog") {
|
||||||
|
std::cout << "[Eldritch Bark]" << std::endl;
|
||||||
|
} else {
|
||||||
|
std::cout << "[Eldritch WrongAnimal Sound]" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
20
ex00/WrongAnimal.hpp
Normal file
20
ex00/WrongAnimal.hpp
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef WRONG_ANIMAL_HPP
|
||||||
|
#define WRONG_ANIMAL_HPP
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class WrongAnimal {
|
||||||
|
public:
|
||||||
|
WrongAnimal();
|
||||||
|
WrongAnimal(const WrongAnimal &other);
|
||||||
|
~WrongAnimal();
|
||||||
|
WrongAnimal &operator=(const WrongAnimal &other);
|
||||||
|
|
||||||
|
std::string getType() const;
|
||||||
|
void makeSound() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::string type;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
8
ex00/WrongCat.cpp
Normal file
8
ex00/WrongCat.cpp
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#include "WrongCat.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
WrongCat::WrongCat() {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
type = "WrongCat";
|
||||||
|
}
|
||||||
14
ex00/WrongCat.hpp
Normal file
14
ex00/WrongCat.hpp
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef WRONG_CAT_HPP
|
||||||
|
#define WRONG_CAT_HPP
|
||||||
|
|
||||||
|
#include "WrongAnimal.hpp"
|
||||||
|
|
||||||
|
class WrongCat : public WrongAnimal {
|
||||||
|
public:
|
||||||
|
WrongCat();
|
||||||
|
WrongCat(const WrongCat &other);
|
||||||
|
~WrongCat();
|
||||||
|
WrongCat &operator=(const WrongCat &other);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
7
ex00/WrongDog.cpp
Normal file
7
ex00/WrongDog.cpp
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "WrongDog.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
WrongDog::WrongDog() {
|
||||||
|
std::cout << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
type = "WrongDog";
|
||||||
|
}
|
||||||
14
ex00/WrongDog.hpp
Normal file
14
ex00/WrongDog.hpp
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef WRONG_DOG_HPP
|
||||||
|
#define WRONG_DOG_HPP
|
||||||
|
|
||||||
|
#include "WrongAnimal.hpp"
|
||||||
|
|
||||||
|
class WrongDog : public WrongAnimal {
|
||||||
|
public:
|
||||||
|
WrongDog();
|
||||||
|
WrongDog(const WrongDog &other);
|
||||||
|
~WrongDog();
|
||||||
|
WrongDog &operator=(const WrongDog &other);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
55
ex00/main.cpp
Normal file
55
ex00/main.cpp
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
#include "Animal.hpp"
|
||||||
|
#include "Cat.hpp"
|
||||||
|
#include "Dog.hpp"
|
||||||
|
#include "WrongAnimal.hpp"
|
||||||
|
#include "WrongCat.hpp"
|
||||||
|
#include "WrongDog.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
{
|
||||||
|
Animal animal1 = Animal();
|
||||||
|
Animal animal2 = animal1;
|
||||||
|
Animal animal3;
|
||||||
|
animal3 = animal1;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
j->makeSound();
|
||||||
|
meta->makeSound();
|
||||||
|
|
||||||
|
delete meta;
|
||||||
|
delete j;
|
||||||
|
delete i;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
{
|
||||||
|
const WrongAnimal *meta = new WrongAnimal();
|
||||||
|
const WrongAnimal *j = new WrongDog();
|
||||||
|
const WrongAnimal *i = new WrongCat();
|
||||||
|
|
||||||
|
std::cout << j->getType() << " " << std::endl;
|
||||||
|
std::cout << i->getType() << " " << std::endl;
|
||||||
|
i->makeSound();
|
||||||
|
j->makeSound();
|
||||||
|
meta->makeSound();
|
||||||
|
|
||||||
|
delete meta;
|
||||||
|
delete j;
|
||||||
|
delete i;
|
||||||
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
|
{
|
||||||
|
const Dog *dog = new Dog();
|
||||||
|
dog->makeSound();
|
||||||
|
delete dog;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue