Du solltest dich dringend mit Objekten und deren Verwendung beschäftigen.
b := TClassB(a);
Ist ein harter TypCast, also man tut so, als wenn A vom Typ TClassB wäre
und erstellt damit keine Kopie!
Delphi-Quellcode:
TClassA = class (TObject)
ValueA : String;
function Print : String; virtual;
procedure Assign(O: TObject); virtual;
end;
TClassB = class (TClassA)
ValueB : String;
function Print : String; override;
procedure Assign(O: TObject); override;
end;
function TClassA.Print : String;
begin
Result := ValueA;
end;
procedure TClassA.Assign(O: TObject);
begin
if O is TClassA then
ValueA := TClassA(O).ValueA;
end;
function TClassB.Print : String;
begin
Result := inherited + ValueB;
end;
procedure TClassA.Assign(O: TObject);
begin
inherited;
if O is TClassB then
ValueB := TClassB(O).ValueB;
end;
Delphi-Quellcode:
var
a : TClassA;
b : TClassB;
begin
a := TClassA.Create;
a.ValueA := 'Class A';
b := TClassB.Create;
b.Assign(a);
b.ValueB := 'Class B';
Memo1.Lines.Add(b.Print);
Memo1.Lines.Add(a.Print);
end;
Wenn für Objekte vom Typ TClassB immer nur Variablen mit diesem Typ verwendet werden und genauso bei TClassA, dann könnte man auch virtual weglassen und statt override ein reintroduce nehmen.
PS: Overload ist bei dir falsch genutzt und du müßtes Reintroduce verwenden, da du Funktionen verdeckst und nicht "mit anderen Parametern" überlädst.