| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /* ************************************************************************** */
- /* */
- /* ::: :::::::: */
- /* main.cpp :+: :+: :+: */
- /* +:+ +:+ +:+ */
- /* By: bchanot <bchanot@42.fr> +#+ +:+ +#+ */
- /* +#+#+#+#+#+ +#+ */
- /* Created: 2026/01/05 12:47:49 by bchanot #+# #+# */
- /* Updated: 2026/01/06 14:21:45 by bchanot ### ########.fr */
- /* */
- /* ************************************************************************** */
- #include "Base.hpp"
- #include <cstdlib>
- #include <ctime>
- 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<A*>(p);
- B *checkB = dynamic_cast<B*>(p);
- C *checkC = dynamic_cast<C*>(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<A&>(p);
- std::cout << "A" << std::endl;
- (void)checkA;
- return ;
- } catch (std::bad_cast &bc) {}
- try {
- B &checkB = dynamic_cast<B&>(p);
- std::cout << "B" << std::endl;
- (void)checkB;
- return ;
- } catch (std::bad_cast &bc) {}
- try {
- C &checkC = dynamic_cast<C&>(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);
- }
|