1. RTTI
RTTI是”Runtime Type Information”的缩写,意思是运行时类型信息,它提供了运行时确定对象类型的方法。
#include <typeinfo.h>
class A
{
public:
virtual void Print() { cout<<"This is class A."<<endl; }
};
class B : public A
{
public:
void Print() { cout<<"This is class B."<<endl; }
};
class C
{
};
class D : public C
{
};
struct MYSTRUCT
{
int i;
};
typedef enum
{
EA = 0,
EB = 1,
}TENUM;
int TestTypeId()
{
//
//基本类型
int i = 0;
short s = 0;
char c = 0;
double d = 0.0L;
int *pi = &i;
cout << typeid(i).name() << endl; // int
cout << typeid(s).name() << endl; // short
cout << typeid(c).name() << endl; // char
cout << typeid(d).name() << endl; // double
cout << typeid(pi).name() << endl; // int *
//
// struct
MYSTRUCT ms;
TENUM te;
cout << typeid(ms).name() << endl; // struct MYSTRUCT
cout << typeid(te).name() << endl; // enum TENUM
//
// class 类
C *pC = new D();
cout << typeid(pC).name() << endl; // class C * // 没有虚函数的时候
cout << typeid(*pC).name() << endl; // class C // 静态,编译的时候确定
A *pA = new B();
cout << typeid(pA).name() << endl; // class A * // 有虚函数的时候
cout << typeid(*pA).name() << endl; // class B // 由动态时确定
//
// typeid
A *pAA = new A();
if (typeid(pAA) == typeid(pA))
{
cout << "pAA=pA" << endl;
}
if (typeid(pAA) == typeid(A*))
{
cout << "pAA = A*" << endl;
}
return 0;
}