typeid的缺点
typeid对多态的情况不支持
#include <iostream>
class Parent
{
public:
Parent() {}
private:
int a = 0;
};
class Child :public Parent
{
public :
Child() {}
private:
int b = 0;
};
int main()
{
Parent* obj1 = new Child();
Parent* pobj1 = obj1;
std::cout << typeid(*obj1).name() << std::endl; //输出 class Parent
std::cout << typeid(*pobj1).name() << std::endl; //输出 class Parent
return 1;
}
dynamic_cast
dynamic_cast<Child*>(pParent)尝试将一个基类指针转换为派生类指针,如果成功,返回指向该对象的派生类指针,失败返回nullptr。
缺点
dynamic_cast只支持多态的情况,即基类必须有虚函数