Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Sub class <-> Parent class

  Alt 2. Mär 2005, 01:56
Moin!

Du hast 2 Variablen und legst damit wohl auch 2 Instanzen an. Daher verhält es sich doch so, das jede Instanz beim anlegen mit dem Constructor ihren eigenen Speicherplatz (und Variablenspeicherplatz) bekommt. Eine Klasse implementiert nur Verhalten und Code - der dann so oft benutzt werden kann wie benötigt - er kann so oft instanziiert werden wie nötig. Auch die Variablen: Die Klasse arbeitent mit ihnen in ihren Code - hat aber keinen Speicherplatz - dieser wird erst beim anlegen der Klasse zugewiesen und dann arbeitet der Code mit den dortigen Variablen. Instanziierst du die Klasse nochmals, dann arbeitet die 2. Instanz auch mit den gleichen Variablen - da es die gleiche Klasse = gleiche Variablen - ABER andere Position im Speicher und somit auch unabhängiger Inhalt.

Eine Klasse ist wie ein Stempel - sie bietet dir ein festes Muster. Wie oft und vor allem wo du jetzt die Klasse hineindrückst oder draufdrückst um das Muster zu erhalten ist deine Sache. Du kannst den "Stempel" am Strand an x-beliebigen Positionen stempeln und genausogut in Mutti's leckerer Griesssuppe...

Das Muster ist gleich - die Lage und die Ränder, Bezugspunkt, geographische Ausrichtung etc ist von jedem Muster anders.

Delphi-Quellcode:
Type
  TObjectParent = Class
  Protected
    a : Integer;

    Procedure SetzeAZurueck;

  Public
    Procedure SetzeA(Const NewA: Integer);
    Function AMal10: Integer;
  End;

  TObjectChild = Class(TObjectParent)
  Protected
    b : Integer;

    Procedure SetzeBeideZurueck;
  Public
    Procedure SetzeB(Const NewB: Integer);
    Function SummAB: Integer;
    Function Summ10A_10B: Integer;
  End;

....

Procedure TObjectParent.SetzeAZurueck;
Begin
  A := 0;
End;

Procedure TObjectParent.SetzeA(Const NewA: Integer);
Begin
  A := NewA;
End;

Function TObjectParent.AMal10: Integer;
Begin
  Result := A;
End;

  // Child

Procedure TObjectChild.SetzeBeideZurueck;
Begin
  SetzaAZurueck; // A und deren Methode hat diese Klasse geerbt
  B := 0;
End;

Procedure TObjectChild.SetzeB(Const NewB: Integer);
Begin
  B := NewB;
End;

Function TObjectChild.SummAB: Integer;
Begin
  Result := A + B;
End;

Function TObjectChild.Summ10A_10B: Integer;
Begin
  Result := AMal10 + B * 10;
End;
Ich hoffe das wird klarer bzw. trifft das Problem.

Ansonsten wenn du wirklich den Wert von A einer Instanz von TObjectParent haben willst, dann ist doch die Frage von welcher TObjectParent Instanz? Du kannst doch so viele Instanzen anlegen bis der Speicher überquillt - daher: den Wert der Variablen A von welcher Instanz sollte er denn nehmen/nutzen um ihn dir zurück zu geben?

MfG
Muetze1
  Mit Zitat antworten Zitat