program objInst;
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;
o: TToggle;
o2: TNthToggle;
begin
NUM :=1;
if (ParamCount=1) then Val(ParamStr(1),NUM,code);
o:=TToggle.Create(True);
for i:=1 to 5 do
if o.Activate.Value then
Write('true'#13#10)
else
Write('false'#13#10);
o.Destroy;
for i:=1 to NUM do begin
o:=TToggle.Create(True);
o.Destroy;
end;
WriteLn;
o2:=TNthToggle.Create(True,3);
for i:=1 to 8 do
if o2.Activate.Value then
Write('true'#13#10)
else
Write('false'#13#10);
o2.Destroy;
for i:=1 to NUM do begin
o2:=TNthToggle.Create(True,3);
o2.Destroy;
end;
WriteLn;
end.