ex02: init
This commit is contained in:
parent
671d71f273
commit
55329e73c2
26
ex02/Makefile
Normal file
26
ex02/Makefile
Normal file
@ -0,0 +1,26 @@
|
||||
CXX := c++
|
||||
CXXFLAGS := -std=c++98 -Wall -Wextra -Werror -g
|
||||
SRCDIR := src
|
||||
OBJDIR := obj
|
||||
NAME := ex02
|
||||
|
||||
SRCS := $(wildcard $(SRCDIR)/*.cpp)
|
||||
OBJS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS))
|
||||
|
||||
all: $(NAME)
|
||||
|
||||
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
|
||||
mkdir -p $(OBJDIR)
|
||||
$(CXX) $(CXXFLAGS) -c $< -o $@
|
||||
|
||||
$(NAME): $(OBJS)
|
||||
$(CXX) $(CXXFLAGS) $^ -o $@
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJDIR)
|
||||
|
||||
fclean: clean
|
||||
rm -fr $(NAME)
|
||||
|
||||
re: fclean
|
||||
@make --no-print-directory all
|
5
ex02/src/A.hpp
Normal file
5
ex02/src/A.hpp
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
#include "Base.hpp"
|
||||
|
||||
class A: public Base
|
||||
{};
|
5
ex02/src/B.hpp
Normal file
5
ex02/src/B.hpp
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
#include "Base.hpp"
|
||||
|
||||
class B: public Base
|
||||
{};
|
4
ex02/src/Base.cpp
Normal file
4
ex02/src/Base.cpp
Normal file
@ -0,0 +1,4 @@
|
||||
#include "Base.hpp"
|
||||
|
||||
Base::~Base()
|
||||
{}
|
7
ex02/src/Base.hpp
Normal file
7
ex02/src/Base.hpp
Normal file
@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
class Base
|
||||
{
|
||||
public:
|
||||
virtual ~Base();
|
||||
};
|
5
ex02/src/C.hpp
Normal file
5
ex02/src/C.hpp
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
#include "Base.hpp"
|
||||
|
||||
class C: public Base
|
||||
{};
|
23
ex02/src/generate.cpp
Normal file
23
ex02/src/generate.cpp
Normal file
@ -0,0 +1,23 @@
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "Base.hpp"
|
||||
#include "A.hpp"
|
||||
#include "B.hpp"
|
||||
#include "C.hpp"
|
||||
|
||||
Base* genere(void)
|
||||
{
|
||||
|
||||
std::srand(time(NULL));
|
||||
|
||||
switch (rand() % 3) {
|
||||
case 0:
|
||||
return new A;
|
||||
case 1:
|
||||
return new B;
|
||||
case 2:
|
||||
return new C;
|
||||
}
|
||||
return NULL;
|
||||
}
|
38
ex02/src/identify.cpp
Normal file
38
ex02/src/identify.cpp
Normal file
@ -0,0 +1,38 @@
|
||||
#include "identify.hpp"
|
||||
#include "A.hpp"
|
||||
#include "B.hpp"
|
||||
#include "C.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
void indentify(Base* p)
|
||||
{
|
||||
if (dynamic_cast<A*>(p) == nullptr)
|
||||
std::cout << "A" << std::endl;
|
||||
else if (dynamic_cast<B*>(p) == nullptr)
|
||||
std::cout << "B" << std::endl;
|
||||
else if (dynamic_cast<C*>(p) == nullptr)
|
||||
std::cout << "C" << std::endl;
|
||||
}
|
||||
|
||||
void identify(const Base &r)
|
||||
{
|
||||
try
|
||||
{
|
||||
(void)dynamic_cast<A>(r);
|
||||
std::cout << "A" << std::endl;
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
(void)dynamic_cast<B>(r)
|
||||
std::cout << "B" << std::endl;
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
(void)dynamic_cast<C>(r)
|
||||
std::cout << "C" << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
6
ex02/src/identify.hpp
Normal file
6
ex02/src/identify.hpp
Normal file
@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "Base.hpp"
|
||||
|
||||
void identify(Base* p);
|
||||
void identify(Base& p);
|
Loading…
Reference in New Issue
Block a user