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 von Fahrzeug . Du kannst überprüfen, ob ein Fahrzeug ein Auto ist und ein dynamic_cast<Auto>() benutzen, um an die Auto-Methoden zu kommen oder die (falls vorhandenen) überschriebenen Funktionen in der Base-Klasse virtual machen.


  • Mod

    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.


Anmelden zum Antworten