The typeid operator lets you determine the type of an object. Like the sizeof operator, it takes two kinds of arguments:
NOTE Whenever you use typeid operator, you must #include the typeinfo header file.
The typeid operator returns a reference to a std::type_info object that you can compare with the == and != operators. For example, if you have these classes and objects:
class Person { /* . . . */ };
class Athlete : public Person { /* . . . */ };
using namespace std;
Person *lois = new Person;
Athlete *arnold = new Athlete;
Athlete *louganis = new Athlete;
All these expressions are true:
#include <typeinfo>
// . . .
if (typeid(Athlete) == typeid(*arnold))
// arnold is an Athlete, result is true
if (typeid(*arnold) == typeid(*louganis))
// arnold and louganis are both Athletes, result is true
if (typeid(*lois) == typeid(*arnold)) // ...
// lois and arnold are not the same type, result is false
You can access the name of a type with the name() member function in the std::type_info class. For example, these statements:
#include <typeinfo>
// . . .
cout << "Lois is a(n) "
<< typeid(*lois).name() << endl;
cout << "Arnold is a(n) "
<< typeid(*arnold).name() << endl;
Print this:
Lois is a(n) Person
Arnold is a(n) Athlete