program methCall;
type
TToggle = class(TObject)
private
FValue : boolean;
function getValue: boolean;
public
constructor create(aValue: boolean);
function Activate: TToggle; virtual;
property Value: boolean read getValue;
end;
TNthToggle = class(TToggle)
private
FCounter, FCountMax : integer;
public
constructor create(aValue: boolean; aMaxCount: integer);
function Activate: TToggle; override;
property CountMax: integer read FCountMax write FCountMax;
end;
constructor TToggle.Create(aValue: boolean);
begin
FValue:=aValue;
end;
function TToggle.Activate: TToggle;
begin
FValue:=not FValue;
result:=self;
end;
function TToggle.getValue: boolean;
begin
result:=FValue;
end;
constructor TNthToggle.Create(aValue: boolean; aMaxCount: integer);
begin
inherited create(aValue);
FCountMax:=aMaxCount;
end;
function TNthToggle.Activate: TToggle;
begin
inc(FCounter);
if FCounter>=CountMax then begin
inherited Activate;
FCounter:=0;
end;
result:=self;
end;
var NUM, code, i: integer;
value: boolean;
toggle: TToggle;
nToggle: TNthToggle;
begin
value:=false; // just to shut up the compiler
NUM :=1;
if (ParamCount=1) then Val(ParamStr(1),NUM,code);
toggle := TToggle.Create(True);
for i:=1 to NUM do
value:=toggle.Activate.Value;
toggle.Destroy;
if value then Write('true'#13#10) else Write('false'#13#10);
nToggle:=TNthToggle.Create(True,3);
for i:=1 to NUM do
value:=nToggle.Activate.Value;
nToggle.Destroy;
if value then Write('true'#13#10) else Write('false'#13#10);
end.