cpp/CPP06/ex02/Base.cpp
2024-12-04 17:29:31 +01:00

48 lines
797 B
C++

#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<A*>(p))
std::cout << "A" << std::endl;
if (dynamic_cast<B*>(p))
std::cout << "B" << std::endl;
if (dynamic_cast<C*>(p))
std::cout << "C" << std::endl;
}
void Base::identify(Base &p) {
try {
(void)dynamic_cast<A&>(p);
std::cout << "A" << std::endl;
} catch (std::exception& e) {}
try {
(void)dynamic_cast<B&>(p);
std::cout << "B" << std::endl;
} catch (std::exception& e) {}
try {
(void)dynamic_cast<C&>(p);
std::cout << "C" << std::endl;
} catch (std::exception& e) {}
}
A::~A() {}
B::~B() {}
C::~C() {}