Demonstrating run-time type id : typeid « Development « C++ Tutorial






#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"








5.24.typeid
5.24.1.Use typeid
5.24.2.Use typeid on a polymorphic class heirarchy
5.24.3.Compare the typeid for templates
5.24.4.Use a reference with typeid
5.24.5.Demonstrating run-time type id
5.24.6.Using typeid with templates
5.24.7.Using typeid: class pointer, base class, derived class,
5.24.8.typeid() function and RTTI must be enabled in compiler
5.24.9.Output the name of a typeid
5.24.10.print type name of what ptr points at
5.24.11.Using typeid: enum data type