我想从父指针获取孩子的类名。
class Parent{
}
class Child: Parent {
}
Parent* parent = new Child;
cout << typeid(parent).name(); //it prints "Parent", but I want to print "Child"
怎么办?
首先,该类必须是多态的,即至少有一个虚函数。通常,您会将其设置为析构函数,因为没有虚拟析构函数的基类会带来麻烦。
然后,您需要查询对象的类型,而不是指向它的指针。拼:
class Parent
{
public:
virtual ~Parent() = default;
};
class Child : public Parent
{
};
Parent *parent = new Child;
cout << typeid(*parent).name();
[现场示例]
正如 cppreference 所解释的那样,parent
需要是一个多态对象。
换句话说,在您的Parent
中添加至少 1 virtual
方法将获得您想要的结果。