#include <iostream> #include <typeinfo> class Base { public: virtualvoid show(){ std::cout<<"Base show"<< std::endl;} }; class Derived :public Base { public: void show() override { std::cout<<"Derived show"<< std::endl;} }; int main(){ Base* basePtr =new Derived(); Base* basePtr2 =new Base();
std::cout<<"Type of basePtr: "<<typeid(*basePtr).name()<< std::endl; std::cout<<"Type of basePtr2: "<<typeid(*basePtr2).name()<< std::endl; if(typeid(*basePtr)==typeid(Derived)){ std::cout<<"basePtr is of type Derived"<< std::endl; }else{ std::cout<<"basePtr is not of type Derived"<< std::endl; } delete basePtr; delete basePtr2; return0; }
输出结果:
span class="typ">Type of basePtr:9Derived// 注意:typeid的name()返回的类型名称可能因编译器而异Type of basePtr2:8Base// 同上
basePtr is of type Derived