Files
cpp06/ex02/Base.cpp
2025-08-15 15:11:43 +02:00

67 lines
1.2 KiB
C++

#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) {}