Pointertyp konvertieren



  • Hey 🙂

    Ich hab ein kleines Problem und weiß nicht genau wie ich es angehen soll.

    Folgende Klassenstruktur:

    class A {
    public:
      A() {}
    };
    
    class B : public A {
    public:
      void machWas() {}
    };
    

    und dieser Code:

    A* object = getObject();
    B* b = object; // Hier muss konbertiert werden
    b->machWas()
    

    getObject() liefert mir ein Objekt einer abgeleiteten Klasse von A. In meinem Fall gibt es viele Klassen, die von A erben. Zur Compile-Zeit weiß man nicht, welches.
    An bestimmten Stellen jedoch kann man sich sicher sein, dass z.B. eine Instanz von B zurückgeliefert wird (siehe Beispiel). In diesem Fall muss man doch irgendwie den Pointertyp konvertieren können.

    Ich hoffe, ihr könnt mir da weiterhelfen. 🙂
    Grüße



  • Zur Compile-Zeit weiß man nicht, welches.

    Natürlich weiß man das.

    Wenn B von A erbt, kannst du dynamic_cast verwenden.



  • Athar schrieb:

    Zur Compile-Zeit weiß man nicht, welches.

    Natürlich weiß man das.

    Wenn B von A erbt, kannst du dynamic_cast verwenden.

    Wenn A mindestens eine virtuelle Funktion hat (der Destruktor bietet sich an).

    Lars



  • Vielen Dank, es funktioniert. 🙂



  • Wenn tatsächlich bekannt ist, dass das an der Stelle ein "B" ist, tuts auch ein static_cast.


Anmelden zum Antworten