Announcement

Collapse
No announcement yet.

abgeletete Selbstreferenzierung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • abgeletete Selbstreferenzierung

    Hallo,

    ich habe folgendes Problem, ich hab eine Klasse und eine abgeletete Klasse:

    TBaum1 = class(TObject)
    ...
    function Next: TBaum1;
    end;

    TBaum2 = class(TBaum1)
    ...
    end;

    Baum2, BaumX: TBaum2

    Wenn ich jetzt
    BaumX:=Baum2.Next;
    aufrufe muß ich das jedesmal so machen:
    BaumX:=(Baum2.Next as TBaum2);

    Oder ich leite die Funktion Next jedesmal ab. Das Problem: es soll die jeweils aktuelle Klasse als Result zurückliefern.

    Kann man das irgendwie vereinfachen ohne in jeder abgeleteten Klasse diese Funktion Next neu zu überschreiben? (Ich hab jede Menge abgeleitete Klassen, von der Grundklasse da dies einen Kompexen Cache in Baumstruktur für eine Datenbank aufbaut. Ist als Zeigerstruktur implementiert da MemBDs zu langsam sind)

  • #2
    Hallo Matthias,

    wenn möglich, dann deklariere doch deine beiden Objektinstanzen aus deinem Beispiel als TBaum1:

    Baum2, BaumX: TBaum1;

    Damit funktioniert deine Zuweisung über Next.

    Beim Anlegen der Instanz musst Du dann natürlich wissen, um was es sich handelt:

    Baum2 := TBaum2.Create;

    Solange Du keine spezifischen Daten aus TBaum2 brauchst, solltes Du damit klar kommen.

    Gruß, Hans

    Comment


    • #3
      Hallo,

      Danke für die Antwort. In den Abgeleiteten Klassen gibt es natürlich weitere Daten die ich brauche. Ich komme wahrscheinlich nicht darum herum diese Methoden alle abzuleiten.

      Comment


      • #4
        Hallo,

        wenn Du an einer bestimmten Stelle konkrete Daten brauchst, ist es meiner Ansicht nach besser, an dieser Stelle zu casten:

        Bsp:

        if (BaumX is TBaum2) then
        TBaum2(BaumX).Baum2Daten .....

        Für den Aufbau der Baumstruktur reicht es eigentlich aus, nur mit der abstrakten Klasse zu arbeiten.

        Im Detail musst Du natürlich selber entscheiden, wie Du es machen willst, dazu kann man auf Grund des kleinen Beispiels natürlich keinen Vorschlag machen.

        Viele Grüße, Hans.

        Comment

        Working...
        X