从家长处获取孩子的类名

  • 本文关键字:孩子 获取 c++
  • 更新时间 :
  • 英文 :


我想从父指针获取孩子的类名。

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方法将获得您想要的结果。

最新更新