Vector und Vererbung
-
Guten Tach
Ich beschäftige mich seit ein paar Tagen mit einem kleinen Problem und stehe gerade voll auf dem Schlauch.
Ich habe zwei Klassen
class Fahrzeuge
{}
class Auto: public Fahrzeuge
{}
Wenn ich in meinem Programm einen vector<Fahrzeuge> dienstfahrzeuge anlege.
Kann ich mit dienstfahrzeuge.push_back(auto) und dienstfahrzeuge.push_back(fahrezuge) hinzufügen.
Jedoch werden die zusätzliche Elemente in Auto nicht übernommen und mit typeid(auto).name() wird nicht die Klasse Auto angezeigt sondern Fahrzeuge.Ich möchte alle Fahrzeuge in den vector dienstfahrzeuge packen und könnte dann alle Fahrzeuge ausgeben, egal ob es ein Auto ist oder ein Roller. Hierbei sollten aber die Elemente der einzelnen Klassen angezeigt werden.
Habt ihr eine Lösung. Ich steh hier irgendwo voll auf den Schlauch.
Gruß
JosefL
-
Da du den Vector mit
std::vector<Fahrzeug>angegeben hast, hast du auch nur direkten Zugriff auf die Methoden vonFahrzeug. Du kannst überprüfen, ob ein Fahrzeug einAutoist und eindynamic_cast<Auto>()benutzen, um an die Auto-Methoden zu kommen oder die (falls vorhandenen) überschriebenen Funktionen in der Base-Klassevirtualmachen.
-
Du suchst das Stichwort "Polymorphie". Was bei dir gerade passiert, nennt sich "Slicing. Mit diesen beiden Stichworten, solltest du einiges zu lesen haben, was dein Verständnis von Klassen und Objekten vertiefen wird und letztendlich zu einer Lösung führen wird.