2017-04-08 2 views
2

Ich möchte den Klassennamen des Kindes vom Elternzeiger erhalten.Abrufen des Klassennamens des Kindes von Eltern

class Parent{ 
} 
class Child: Parent { 
} 

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

Wie geht das?

Antwort

4

Zunächst einmal muss die Klasse polymorph sein, d. H. Mindestens eine virtuelle Funktion haben. Normalerweise würden Sie dies zum Destruktor machen, weil Basisklassen ohne virtuelle Destruktoren ein Rezept für Probleme sind.

Dann müssen Sie den Typ des Objekt und nicht der Zeiger, um es abzufragen. Zusammengestellt:

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

class Child : public Parent 
{ 
}; 

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

[Live example]

1

Als cppreference explains, parent muss ein polymorphes Objekt sein.

Mit anderen Worten, Hinzufügen von mindestens 1 virtual Methode zu Ihrem Parent erhalten Sie Ihr gewünschtes Ergebnis.

Verwandte Themen