main.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* ************************************************************************** */
  2. /* */
  3. /* ::: :::::::: */
  4. /* main.cpp :+: :+: :+: */
  5. /* +:+ +:+ +:+ */
  6. /* By: bchanot <bchanot@42.fr> +#+ +:+ +#+ */
  7. /* +#+#+#+#+#+ +#+ */
  8. /* Created: 2026/01/05 12:47:49 by bchanot #+# #+# */
  9. /* Updated: 2026/01/06 14:21:45 by bchanot ### ########.fr */
  10. /* */
  11. /* ************************************************************************** */
  12. #include "Base.hpp"
  13. #include <cstdlib>
  14. #include <ctime>
  15. Base *generate(void) {
  16. srand(time(0));
  17. int randomNum = rand() % 3;
  18. if (randomNum == 0)
  19. return new A();
  20. else if (randomNum == 1)
  21. return new B();
  22. else
  23. return new C();
  24. }
  25. void identify(Base *p) {
  26. A *checkA = dynamic_cast<A*>(p);
  27. B *checkB = dynamic_cast<B*>(p);
  28. C *checkC = dynamic_cast<C*>(p);
  29. std::cout << "With pointer" << std::endl;
  30. if (checkA)
  31. std::cout << "A" << std::endl;
  32. else if (checkB)
  33. std::cout << "B" << std::endl;
  34. else if (checkC)
  35. std::cout << "C" << std::endl;
  36. else
  37. std::cout << "None of A, B or C" << std::endl;
  38. }
  39. void identify(Base &p) {
  40. std::cout << "With reference" << std::endl;
  41. try {
  42. A &checkA = dynamic_cast<A&>(p);
  43. std::cout << "A" << std::endl;
  44. (void)checkA;
  45. return ;
  46. } catch (std::bad_cast &bc) {}
  47. try {
  48. B &checkB = dynamic_cast<B&>(p);
  49. std::cout << "B" << std::endl;
  50. (void)checkB;
  51. return ;
  52. } catch (std::bad_cast &bc) {}
  53. try {
  54. C &checkC = dynamic_cast<C&>(p);
  55. std::cout << "C" << std::endl;
  56. (void)checkC;
  57. return ;
  58. } catch (std::bad_cast &bc) {}
  59. std::cout << "None of A, B or C" << std::endl;
  60. }
  61. int main(void) {
  62. C test = C();
  63. std::cout << "test" << std::endl;
  64. identify(generate());
  65. identify(test);
  66. }