/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: bchanot +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2026/01/05 12:47:49 by bchanot #+# #+# */ /* Updated: 2026/01/06 14:21:45 by bchanot ### ########.fr */ /* */ /* ************************************************************************** */ #include "Base.hpp" #include #include Base *generate(void) { srand(time(0)); int randomNum = rand() % 3; if (randomNum == 0) return new A(); else if (randomNum == 1) return new B(); else return new C(); } void identify(Base *p) { A *checkA = dynamic_cast(p); B *checkB = dynamic_cast(p); C *checkC = dynamic_cast(p); std::cout << "With pointer" << std::endl; if (checkA) std::cout << "A" << std::endl; else if (checkB) std::cout << "B" << std::endl; else if (checkC) std::cout << "C" << std::endl; else std::cout << "None of A, B or C" << std::endl; } void identify(Base &p) { std::cout << "With reference" << std::endl; try { A &checkA = dynamic_cast(p); std::cout << "A" << std::endl; (void)checkA; return ; } catch (std::bad_cast &bc) {} try { B &checkB = dynamic_cast(p); std::cout << "B" << std::endl; (void)checkB; return ; } catch (std::bad_cast &bc) {} try { C &checkC = dynamic_cast(p); std::cout << "C" << std::endl; (void)checkC; return ; } catch (std::bad_cast &bc) {} std::cout << "None of A, B or C" << std::endl; } int main(void) { C test = C(); std::cout << "test" << std::endl; identify(generate()); identify(test); }