Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Eine Frage an die Cracks: erben (https://www.delphipraxis.net/171629-eine-frage-die-cracks-erben.html)

Perlsau 16. Nov 2012 09:09

AW: Eine Frage an die Cracks: erben
 
Zitat:

Zitat von Jumpy (Beitrag 1191439)
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)?

Ich glaube nicht, daß ich genau wissen möchte, welcher Speicher wann, wo und wofür reserviert wird, dazu ist die Speicherverwaltung von Delphi für meine Verhältnisse einfach zu komplex. Soweit ich aber weiß, wird genau die Speichergröße reserviert, die für die Referenzen auf das Eltern-Objekt notwendig ist. Gibst du neue Methoden oder Properties ein, wird entsprechend weiterer Speicher reserviert, dito auch beim Überschreiben von Methoden und Properties. Alles, was darüber hinausgeht, hält mich nur vom Arbeiten ab :stupid:, deshalb klinke ich mich jetzt hier auch wieder aus.

mkinzler 16. Nov 2012 09:25

AW: Eine Frage an die Cracks: erben
 
Methoden(properties) sind grundsätzlich nur Zeiger, egal ob die Methode geerbt ist oder nicht.
http://docwiki.embarcadero.com/RADSt...e_Datenformate

Mach dich mal nach der VMT schlau

Sir Rufo 16. Nov 2012 09:32

AW: Eine Frage an die Cracks: erben
 
Zitat:

Zitat von Jumpy (Beitrag 1191439)
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;

DeddyH 16. Nov 2012 09:39

AW: Eine Frage an die Cracks: erben
 
Zur VMT und DMT hat sirius in diesem Thread eine IMO sehr gute und ausführliche Beschreibung geschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz