今天用了下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會返回子類的具體類型