1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
{ this example tests combinations of class and helpers hierarchies }
program tchlp54;
{$ifdef fpc}
{$mode delphi}
{$endif}
{$apptype console}
type
TTest1 = class
end;
TTest2 = class(TTest1)
class function Test3: Integer;
end;
TTest3 = class(TTest2)
class function Test1: Integer;
class function Test2: Integer;
end;
TTest4 = class(TTest3)
end;
TTest1Helper = class helper for TTest1
class function Test1: Integer;
class function Test3: Integer;
class function Test4: Integer;
end;
TTest3Helper = class helper for TTest3
class function Test2: Integer;
class function Test4: Integer;
end;
TTest4Helper = class helper(TTest1Helper) for TTest4
class function DoTest1: Integer;
class function DoTest2: Integer;
class function DoTest3: Integer;
class function DoTest4: Integer;
end;
class function TTest2.Test3: Integer;
begin
Result := 1;
end;
class function TTest3.Test1: Integer;
begin
Result := 1;
end;
class function TTest3.Test2: Integer;
begin
Result := 1;
end;
class function TTest1Helper.Test1: Integer;
begin
Result := 2;
end;
class function TTest1Helper.Test3: Integer;
begin
Result := 2;
end;
class function TTest1Helper.Test4: Integer;
begin
Result := 1;
end;
class function TTest3Helper.Test2: Integer;
begin
Result := 2;
end;
class function TTest3Helper.Test4: Integer;
begin
Result := 2;
end;
class function TTest4Helper.DoTest1: Integer;
begin
Result := Test1;
end;
class function TTest4Helper.DoTest2: Integer;
begin
Result := Test2;
end;
class function TTest4Helper.DoTest3: Integer;
begin
Result := Test3;
end;
class function TTest4Helper.DoTest4: Integer;
begin
Result := Test4;
end;
var
res: Integer;
begin
res := TTest4.DoTest1;
Writeln('TTest4.DoTest1: ', res);
if res <> 2 then
Halt(1);
res := TTest4.DoTest2;
Writeln('TTest4.DoTest2: ', res);
if res <> 2 then
Halt(2);
res := TTest4.DoTest3;
Writeln('TTest4.DoTest3: ', res);
if res <> 2 then
Halt(3);
res := TTest4.DoTest4;
Writeln('TTest4.DoTest4: ', res);
if res <> 1 then
Halt(4);
Writeln('ok');
end.
|