#include <typeinfo>
#include <iostream>
using namespace std;
class A
{
public:
void print(){}
~A(){}
};
class AA:public A
{
public:
virtual void printaa()
{}
};
class AAA:public AA
{
};
int main()
{
AA aa;
AAA aaa;
A *a=&aa;
cout<<typeid(a).name()<<endl;
cout<<typeid(*a).name()<<endl;
a=&aaa;
cout<<typeid(a).name()<<endl;
cout<<typeid(*a).name()<<endl;
AA *a2=&aaa;
cout<<typeid(a2).name()<<endl;
cout<<typeid(*a2).name()<<endl;
cout<<typeid(A).name()<<endl;
cout<<typeid(A*).name()<<endl;
cout<<typeid(A&).name()<<endl;
AA &a3=aa;
cout<<typeid(a3).name()<<endl;
cout<<typeid(&a3).name()<<endl;
return 1;
}
class A *
class A
class A *
class A
class AA *
class AAA
class A
class A *
class A &
class AA
class AA *
当typeid操作数是类类型,但不是带有虚拟函数的类类型时,typeid操作符回指出操作数的类型,而不是底层对象的类型。
一般当类中没有其他可声明为虚函数的函数时,就应该把析构函数声明为 virtual
只有类中包含virtual函数的时候,才能使用 RTTI