#include "Base.hpp" Base::~Base() {} Base *Base::generate() { int i = rand() % 3; switch (i) { case 0: return new A; case 1: return new B; case 2: return new C; default: return new A; } } void Base::identify(Base *p) { if (dynamic_cast(p)) std::cout << "A" << std::endl; if (dynamic_cast(p)) std::cout << "B" << std::endl; if (dynamic_cast(p)) std::cout << "C" << std::endl; } void Base::identify(Base &p) { try { (void)dynamic_cast(p); std::cout << "A" << std::endl; } catch (std::exception& e) {} try { (void)dynamic_cast(p); std::cout << "B" << std::endl; } catch (std::exception& e) {} try { (void)dynamic_cast(p); std::cout << "C" << std::endl; } catch (std::exception& e) {} } A::~A() {} B::~B() {} C::~C() {}