c++ typeid使用

今天用了下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;

}

  1. 當父類中不包含虛函數時結果:
    P6parent
    P3son
    6parent
    1
    1
    1
    0

  2. 當父類中包含虛函數時(取消註釋) 執行結果:
    P6parent
    P3son
    3son
    1
    0
    0
    0

說明當在含有虛函數類繼承關係中,可以使用指針來判斷類型,使用值類型和引用類型,會typeid會返回子類的具體類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章