#include #include #include #include "Classes.hpp" Base * generate() { Base *base; srand (time(NULL)); int i = rand() % 3; if (i == 0) { std::cout << "A\n"; base = new A(); } else if (i == 1) { std::cout << "B\n"; base = new B(); } else { std::cout << "C\n"; base = new C(); } return base; } void identify(Base* p) { A * a; B * b; C * c; a = dynamic_cast(p); if ( a != NULL) std::cout << "A\n"; b = dynamic_cast(p); if ( b != NULL) std::cout << "B\n"; c = dynamic_cast(p); if ( c != NULL) std::cout << "C\n"; } void identify(Base& p) { Base base; try {base = dynamic_cast(p); std::cout << " ";} catch ( std::exception ) {std::cout << " ";} try {base = dynamic_cast(p); std::cout << " ";} catch ( std::exception ) {std::cout << " ";} try {base = dynamic_cast(p); std::cout << " ";} catch ( std::exception ) {std::cout << " ";} std::cout << "\n"; } int main() { Base *base = generate(); identify(base); identify(*base); delete base; return 0; }