今天用了下c++ typeid这个操作符记录一下:
class parent
{
void getdata()
{}
// virtual void deal()
// {}
};
class son:public parent
{
};
int main()
{
parent *pa =new son(); //pointer
son data;
parent& ref =data; //refer
std::cout<<typeid(parent *).name()<<std::endl;
std::cout<<typeid(son *).name()<<std::endl;
std::cout<<typeid(ref).name()<<std::endl;
std::cout<<(typeid(parent*)==typeid(pa))<<std::endl;
std::cout<<(typeid(ref)==typeid(parent))<<std::endl;
std::cout<<(typeid(*pa)==typeid(parent))<<std::endl;
std::cout<<(typeid(void*)==typeid(pa))<<std::endl;
return 0;
}
-
当父类中不包含虚函数时结果:
P6parent
P3son
6parent
1
1
1
0 -
当父类中包含虚函数时(取消注释) 执行结果:
P6parent
P3son
3son
1
0
0
0
说明当在含有虚函数类继承关系中,可以使用指针来判断类型,使用值类型和引用类型,会typeid会返回子类的具体类型