我有以下代码:
// irrelevant code ...
type
Zombie = class
private
...
Age : Integer;
Alive : Boolean;
TotalDeadZombies, TotalZombieAge : Double;
public
...
procedure ZombieGrow();
procedure CheckIfDead();
...
Function AvgLife() : Double;
end;
procedure Zombie.ZombieGrow();
begin
...
if (Alive = false) then
begin
TotalDeadZombies := TotalDeadZombies + 1;
TotalZombieAge := TotalZombieAge + Age;
end;
end;
procedure Zombie.CheckIfDead();
begin
if Random(100) < 20 then
Alive := False;
end;
function Zombie.AvgLife() : Double;
begin
Result := TotalZombieAge / TotalDeadZombie;
end;
我遇到的问题是我想显示死僵尸的平均年龄。这可以通过以下方式完成:
Write('Average age '+Floattostr(Round(AvgLife)))
但是,这是在另一个类(此处未显示)中调用的,根据我对OOP的理解,它需要指定一个实例化对象,例如zombies[1].AvgLife
如果它们存储在,例如,{{ {1}}数组(只是一个例子)。
是否有一种方法可以使变量Zombies[]
和TotalDeadZombies
不与任何实例化的僵尸绑定,而是绑定到一个类变量,然后我可以以某种方式调用TotalZombieAge
?它只是简单地使它们成为全局变量吗?或者可以用另一种方式完成吗?
答案 0 :(得分:8)
您只需要将变量声明为class var
;然后它们属于类,而不属于类的特定实例。
type
TZombie = class
public
class var TotalDeadZombies, TotalZombieAge: Double;
end;
您可以像TZombie.TotalDeadZombies
一样访问这些内容。同样,有类方法,类属性等。