2017-04-08 101 views
2

我想从父指针中获取孩子的班级名称。从父项目获取孩子的班级名称

class Parent{ 
} 
class Child: Parent { 
} 

Parent* parent = new Child; 
cout << typeid(parent).name(); //it prints "Parent", but I want to print "Child" 

怎么办?

回答

4

首先,类必须是多态的,即至少有一个虚函数。通常情况下,你可以将它作为析构函数,因为没有虚拟析构函数的基类是麻烦的处方。

然后,您需要查询对象的类型,而不是指针。放在一起:

class Parent 
{ 
public: 
    virtual ~Parent() = default; 
}; 

class Child : public Parent 
{ 
}; 

Parent *parent = new Child; 
cout << typeid(*parent).name(); 

[Live example]

1

作为cppreference explainsparent需要一个多态对象。

换言之,将至少1 virtual方法添加到您的Parent会得到您想要的结果。