34 lines
587 B
Plaintext
34 lines
587 B
Plaintext
program PolymorphicCopy;
|
|
|
|
type
|
|
T = class
|
|
function Name:String; virtual;
|
|
function Clone:T; virtual;
|
|
end;
|
|
|
|
S = class(T)
|
|
function Name:String; override;
|
|
function Clone:T; override;
|
|
end;
|
|
|
|
function T.Name :String; begin Exit('T') end;
|
|
function T.Clone:T; begin Exit(T.Create)end;
|
|
|
|
function S.Name :String; begin Exit('S') end;
|
|
function S.Clone:T; begin Exit(S.Create)end;
|
|
|
|
procedure Main;
|
|
var
|
|
Original, Clone :T;
|
|
begin
|
|
Original := S.Create;
|
|
Clone := Original.Clone;
|
|
|
|
WriteLn(Original.Name);
|
|
WriteLn(Clone.Name);
|
|
end;
|
|
|
|
begin
|
|
Main;
|
|
end.
|