#include <iostream>
using namespace std;
class Base {
public:
virtual bool method() { return false; } // Base is polymorphic
};
class Derived1: public Base {
public:
};
class Derived2: public Base {
public:
bool method() { return true; }
};
class Derived3: public Base {
public:
};
Base *factory()
{
switch(rand() 3 ) {
case 0: return new Derived3;
case 1: return new Derived1;
case 2: return new Derived2;
}
return 0;
}
int main()
{
Base *ptr;
for(int i=0; i<10; i++) {
ptr = factory(); // generate an object
cout << "Object is " << typeid(*ptr).name();
cout << endl;
if(typeid(*ptr) == typeid(Derived3))
cout << " Derived3";
if(typeid(*ptr) == typeid(Derived1))
cout << " Derived1";
if(typeid(*ptr) == typeid(Derived2))
cout << " Derived2";
}
return 0;
}
Object is 8Derived2
Derived2Object is 8Derived2
Derived2Object is 8Derived1
Derived1Object is 8Derived1
Derived1Object is 8Derived2
Derived2Object is 8Derived1
Derived1Object is 8Derived3
Derived3Object is 8Derived3
Derived3Object is 8Derived1
Derived1Object is 8Derived2
Derived2"