48 lines
797 B
C++
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() {}
|