2017-04-08 64 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會得到您想要的結果。