Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Eine Frage an die Cracks: erben

  Alt 16. Nov 2012, 09:32
Muss man das nicht trennen nach Feldern und Methoden? Sprich was passiert bei Vererbung mit Feldern, sprich welcher Speicher wird wo wofür reserviert! Und wie werden die Methoden zugeordnet? Gibt es da nicht irgendwelche Tabellen (Mir schwirrt aus der Schule noch das Stichwort Method-Table im Kopf rum) wo (vom Compiler?) geguckt wird, welche Methode gerade gefragt ist (Polymorphie)?
Nein, aber man muss unterscheiden zwischen einer Klasse und einer Instanz.

Die Instanz ist ein Speicherbereich, der mit dem "Klassenstempel" eine besondere Struktur bekommt. Das war es schon.
Die Methoden werden wie eine procedure einfach ausgeführt (der einzige Unterschied ist das Mitführen von Self einer Referenz auf die eigene Instanz => Speicherbereich)

Greift man innerhalb der Methode nicht auf die Instanz zurück, so kann man diese auch einfach aufrufen.

Delphi-Quellcode:
TFoo = class
private
  FValue : Integer;
public
  function Calc( a, b : Integer) : Integer; overload;
  function Calc( a : Integer ) : Integer; overload;
end;

function TFoo.Calc( a, b : Integer ) : Integer;
begin
  Result := a + b;
end;

function TFoo.Calc( a : Integer ) : Integer;
begin
  Result := Calc( a, FValue );
end;

var
  LFoo : TFoo;
begin
  LFoo.Calc( 3, 4 ); // Keine AV obwohl es keine Instanz gibt
  LFoo.Calc( 3 ); // es gibt eine AV, weil in der Methode auf die Instanz zugegriffen wird
end;
Was allerdings gleich ist, sind Klassenvariablen, die werden nicht geklont, sondern die sind in jeder Ableitung da und vor allem gleich!

Delphi-Quellcode:
TFoo = class
  class var _Value : Integer;
end;

TFoo2 = class( TFoo )
end;

begin
  TFoo._Value := 42;
  Assert( TFoo._Value = TFoo2._Value );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat