Files
CPP_Module_06/ex02/Base.cpp
2025-04-12 11:44:33 +02:00

80 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Base.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/09 13:23:31 by adjoly #+# #+# */
/* Updated: 2025/04/09 14:47:54 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#include "Base.hpp"
#include <cstdlib>
#include <iostream>
void _log(std::string emoji, std::string what, std::string who,
std::string str) {
#ifdef VERBOSE
if (who.empty())
std::cout << "" << emoji << "" << what << ": " << str << std::endl;
else
std::cout << "" << emoji << "" << what << "(" << who << "): " << str
<< std::endl;
#else
(void)emoji, (void)what, (void)who, (void)str;
#endif
}
Base *generate(void) {
std::srand(time(0));
switch (std::rand() % 3) {
case 0:
std::cout << "just made an A class !" << std::endl;
return new A;
case 1:
std::cout << "just made an B class !" << std::endl;
return new B;
default:
std::cout << "just made an C class !" << std::endl;
return new C;
};
}
void identify(Base *p) {
if (dynamic_cast<A *>(p))
std::cout << "omg it is an A class !" << std::endl;
else if (dynamic_cast<B *>(p))
std::cout << "omg it is an B class !" << std::endl;
else if (dynamic_cast<C *>(p))
std::cout << "omg it is an C class !" << std::endl;
else
std::cout << "this is none of those class :(" << std::endl;
}
void identify(Base &p) {
try {
(void)dynamic_cast<A &>(p);
std::cout << "omg it is an A class !" << std::endl;
return;
} catch (...) {
}
try {
(void)dynamic_cast<B &>(p);
std::cout << "omg it is an B class !" << std::endl;
return;
} catch (...) {
}
try {
(void)dynamic_cast<C &>(p);
std::cout << "omg it is an C class !" << std::endl;
return;
} catch (...) {
}
std::cout << "this is none of those class :(" << std::endl;
}
Base::~Base(void) { _log("", "Base", "", "destructor called"); }