Anfängerfrage: Verkettete Liste mit verschiedenen Klassen



  • Hallo !

    ich finde leider nichts mit google suche etc. Vielleicht verwende ich auch die falschen Suchworte? Jetzt hoffe ich, dass mir hier wer helfen kann.

    Ich versuche in C++ (Arduino) eine sehr einfache verkettete Liste zu verwalten. In der Liste sind Objekte mit einem Pointer auf das eigentliche Objekt. Dabei habe ich den Pointer als Pointer auf ein Objekt der Elternklasse deklariert, es werden aber Objekte verschiedener Kindklassen verwendet und in der Liste abgelegt.

    Jetzt möchte ich eine Methode aufrufen, die in den Kindklassen jeweils verschieden implementiert ist. Es wird aber immer die Methode der Elternklasse aufgerufen.

    Mache ich etwas falsch, oder geht das einfach so nicht, wie ich das wollte. Dachte das wäre der Sinn von objektorientierter Programmierung ???

    "code" sagt mehr als 1000 Worte:

    class ListNode // Verwaltet die Liste
    {
    ElternKlasse *object;
    ListNode *next;
    .....
    }

    class Elternklasse // Elternklasse der Objkete die in der Liste abgelegt werden sollen.
    {
    void set(int) {.....}
    }

    class KindKlasse
    {
    void set(int) { ... tu was anderes ... }
    }

    Lege ich jetzt ein Objekt der KindKlasse in die Liste (ListNode) und rufe im ListNode

    object->set(x);

    auf, dann wird trotzdem die set Methode der Elternklasse ausgeführt.

    Vielen Dank !!!!!

    p.s.: Ich will bewusst keine Libraries für verkettete Listen etc. Ich möchte auch nicht die gespeicherten Objekte durch Pointer erweitern und dann diese direkt in der Liste verwalten. Es geht mir eher ums Grundsätzliche !



  • Ich sehe hier kein virtual



  • Das scheint mal ein guter Tipp zu sein.

    Eigentlich möchte ich die Methode in der Elternklasse auch nicht virtual machen, weil ich sie nicht in jeder Kindklasse überschreibe, aber das lässt sich notfalls bewerkstelligen. Würde das das Problem lösen ?

    Kann nur eine virtual Methode dynamisch gebunden werden ???



  • Ja
    Ja



  • http://de.wikipedia.org/wiki/Virtuelle_Methode

    Das dürfte wohl die Lösung sein. Bin das von PHP nicht gewöhnt.

    Danke. Ich werde mal umbauen !



  • Jetzt bin ich auch noch draufgekommen, dass virtual nicht zwangsläufig heisst, dass die Methode in der Elternklasse nicht implementiert ist. Naja es gibt wohl noch viel zu lernen 😉 DANKE !!


Anmelden zum Antworten