Typ bei Polymorphie bestimmen



  • Wie kann ich in folgendem Fall bestimmen, zu welchem Typ meine Variable gehört?

    class Basisobjekt { ... };
    class AbgeleitetA : public Basisobjekt { ... };
    class AbgeleitetB : public Basisobjekt { ... };
    
    ...
    
    Basisobjekt b = new AbgeleitetA();
    
    if (b is AbgeleitetA)
        cout << "Aha!";
    else if (b is AbgeleitetB)
        cout << "Bebe!";
    else
        cout << "Basis!";
    

    Den is-Operator gibt's in C++ ja nicht. Wie krieg ich hier den Typ raus?



  • Meister Ederer schrieb:

    Wie kann ich in folgendem Fall bestimmen, zu welchem Typ meine Variable gehört?

    Bevor du dich das fragst, hinterfrage ich erst einmal deine Absichten.

    In der Regel (nicht immer, aber doch recht häufig) ist es ein Fehldesign, wenn du bei Vererbung den konkreten Typ erfahren musst.

    Eine Typprüfung gibt es auch unter C++ (Stichwörter: RTTI, dynamic_cast, typeid).

    cu André



  • Wie schon gesagt sind typeid und dynamic_cast meistens nicht elegant und unnötig. Wenn du für die abgeleiteten Klassen jeweils spezifische Operationen durchführen willst, kannst du das Konzept der virtuellen Methoden nutzen. Wenn du Zeiger oder Referenzen auf Basisobjekte hast, kannst du damit auch abgeleitete Objekte ansprechen, und das ohne explizite Fallunterscheidung.


Anmelden zum Antworten