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