2017-06-15 113 views
0

我有以下代碼:德爾福類變量

// 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他們被存儲在例如Zombies[]數組中(只是一個例子)。

有沒有辦法使得變量TotalDeadZombiesTotalZombieAge不綁定到任何實例化的殭屍,而是一個類變量,然後我可以以某種方式調用AvgLife?它只是簡單地把它們變成全局變量嗎?或者可以以另一種方式做到嗎?

回答

8

你只需要聲明變量爲class var;那麼它們屬於類別,而不屬於某個類別的特定實例

type 
    TZombie = class 
    public 
    class var TotalDeadZombies, TotalZombieAge: Double; 
    end; 

您可以像TZombie.TotalDeadZombies那樣訪問這些文件。同樣,也有類方法,類屬性等。

看看the official documentation