2
我想从父指针中获取孩子的班级名称。从父项目获取孩子的班级名称
class Parent{
}
class Child: Parent {
}
Parent* parent = new Child;
cout << typeid(parent).name(); //it prints "Parent", but I want to print "Child"
怎么办?
我想从父指针中获取孩子的班级名称。从父项目获取孩子的班级名称
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 explains,parent
需要一个多态对象。
换言之,将至少1 virtual
方法添加到您的Parent
会得到您想要的结果。