Files
cpp06/ex02/Base.cpp
2025-08-15 14:48:31 +02:00

79 lines
2.0 KiB
C++

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Base.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/09 13:23:31 by adjoly #+# #+# */
/* Updated: 2025/08/15 14:47:35 by mmoussou ### ########.fr */
/* */
/* ************************************************************************** */
#include "Base.hpp"
#include <cstdlib>
#include <iostream>
Base *generate(void)
{
std::srand(time(0));
switch (std::rand() % 3) {
case 0:
std::cout << "A class generated :D" << std::endl;
return new A;
case 1:
std::cout << "B class generated :D" << std::endl;
return new B;
case 2:
std::cout << "C class generated :D" << std::endl;
return new C;
};
return new A;
}
void identify(Base *p)
{
if (dynamic_cast<A *>(p))
{
std::cout << "omg it's an A object !" << std::endl;
return;
}
if (dynamic_cast<B *>(p))
{
std::cout << "omg it's a B object !" << std::endl;
return;
}
if (dynamic_cast<C *>(p))
{
std::cout << "omg it's a C object !" << std::endl;
return;
}
std::cout << "what is this D:" << std::endl;
}
void identify(Base &p)
{
try {
(void)dynamic_cast<A &>(p);
std::cout << "omg it's an A object !" << std::endl;
return;
}
catch (...) {}
try {
(void)dynamic_cast<B &>(p);
std::cout << "omg it's an B object !" << std::endl;
return;
}
catch (...) {}
try {
(void)dynamic_cast<C &>(p);
std::cout << "omg it's an C object !" << std::endl;
return;
}
catch (...) {}
std::cout << "what is this D:" << std::endl;
}
Base::~Base(void) {}