Austausch unter Klassen



  • Hallo,

    ich habe zwei Klassen. Eine Basisklasse und eine die von dieser erbt.

    In meiner aktuellen main erstelle ich mir ein objekt der geerbten Klasse(diese verfügt ja auch über die Fkt. der Basisklasse).

    Die geerebte klasse verfügt unteranderem über eine private list und die public funktionen pop und push zum einreihen.

    Nun will ich in der Basis Klasse eine Funktion schreiben die die Daten der Liste des angelegten Objektes, der geerbten Klasse, ausliest.

    Geht das überhaupt??
    Wenn ja wie kann ich der Basisklasse das Objekt bekannt machen, was ich in Main anlege?


  • Mod

    Das geht nur sehr bedingt: Stell dir mal vor du hättest ein Objekt der Basisklasse. Dieses hätte dann ja keine list als Member. Was sollte denn dann passieren, wenn du trotzdem die Methode aufrufst, welche die list benutzen?

    Eine Möglichkeit etwas Ähnliches zu erreichen sind virtuelle Funktionen. Das ist eine Möglichkeit, wie erbende Klassen die Funktionalität einer Basisklasse verändern können. Da könntest du in der Basisklasse eine virtuelle Funktion zum Zugriff auf die Liste schreiben, welche du auch in den anderen Funktionen der Basisklasse benutzen kannst. Im Falle der Basisklasse würde diese Zugriffsfunktion aber einfach nichts machen (sie hat ja keine Liste zur Verfügung), in der abgeleiteten Klasse würdest du dann die virtuelle Funktion durch eine andere ersetzen, die auf die Liste zugreift. Dadurch würden die geerbten Funktionen automatisch die neue Version benutzen.

    Ob dies jedoch das richtige für dich ist, kann ich aus deinem Beitrag nicht mit Sicherheit sagen. Es kommt mir eher so vor, als würde dein Design nichts taugen.



  • Ich denke das dein Vorhaben nicht besonders sinnvoll ist, da diese Liste ganz klar ein Element der Basisklasse sein sollte wenn du es dort verarbeiten musst.

    Aber egal, die einfachste Möglichkeit die ich mir vorstelle wäre: in der Basis eine Methode zu implementieren welche ein Zeigr auf die geerbte Klasse oder eben der zu bearbeitenden Liste übernimmt.

    Ginge dann mit Vorwärtsdeklaration

    class B;
    class A
    {
      func(B * b)
      oder 
      func(list l)  
    }
    
    class B : public A
    {
       Zeugs
    }
    
    A::func(B * b)
    {
       b->kannste nutzen;
    }
    

Anmelden zum Antworten