fpc/tests/test/tgeneric15.pp
peter edc0bd3efb * generic inheritance tests
git-svn-id: trunk@8416 -
2007-09-09 13:12:26 +00:00

79 lines
1.0 KiB
ObjectPascal

program Project1;
{$mode objfpc}{$H+}
type
{ TStack }
generic TStack<T> = class(TObject)
public
procedure Clear; virtual;
destructor Destroy; override;
end;
{ TIntegerStack }
TIntegerStack = class(specialize TStack<Integer>)
public
procedure Clear; override;
end;
{ TIntegerStack2 }
TIntegerStack2 = class(specialize TStack<Integer>)
public
procedure Clear; override;
end;
var
Idx : Longint;
{ TIntegerStack }
procedure TIntegerStack.Clear;
begin
Writeln('new clear');
Idx:=Idx or 1;
end;
{ TIntegerStack2 }
procedure TIntegerStack2.Clear;
begin
Writeln('new clear2');
Idx:=Idx or 2;
end;
{ TStack }
procedure TStack.Clear;
begin
Writeln('old clear');
end;
destructor TStack.Destroy;
begin
Writeln('old destroy');
Clear;
end;
var
s: TIntegerStack;
s2: TIntegerStack2;
begin
Idx:=0;
s := TIntegerStack.Create;
Writeln(s.ClassName);
s.Free;
s2 := TIntegerStack2.Create;
Writeln(s2.ClassName);
s2.Free;
if Idx<>3 then
halt(1);
end.