pascalabcnet/TestSuite/abstract1.pas
Бондарев Иван a40483346b bug fix: can not override virtual methods of abstract class
performance improvements
2015-10-18 13:35:44 +02:00

76 lines
988 B
ObjectPascal

type TClass = class
protected f: integer;
internal
procedure Test(a : integer); abstract;
end;
TClass2 = class(TClass)
procedure Test(a : integer); override;
begin
end;
end;
TClass3 = class(TClass)
procedure Test2(k : real); abstract;
end;
TClass4 = class(TClass3)
constructor;
begin
f := 4;
end;
procedure Test(a : integer); override;
begin
assert(f = 4);
end;
procedure Test2(k : real); override;
begin
assert(f = 4);
end;
end;
TClass5 = class(TClass2)
procedure Test3; abstract;
end;
TClass6 = class(TClass5)
constructor;
begin
f := 6;
end;
procedure Test3; override;
begin
assert(f = 6);
end;
end;
TClass7 = abstract class
a: integer;
procedure Test; virtual;
begin
a := 5;
end;
end;
TClass8 = class(TClass7)
procedure Test; override;
begin
a := 3;
end;
end;
var t : TClass;
t2 : TClass3;
t3 : TClass5;
begin
t := new TClass2;
t.Test(2);
t2 := new TClass4;
t2.Test2(2.3);
t3 := new TClass6;
t3.Test3;
var t4 := new TClass8;
t4.Test;
assert(t4.a=3);
end.