3.2 理解對(duì)象
到目前為止,已經(jīng)介紹如何使用變量存儲(chǔ)單條信息,以及如何使用運(yùn)算符和函數(shù)對(duì)這些變量進(jìn)行操作。但是游戲中出現(xiàn)的大多數(shù)事物(譬如說(shuō)外星飛行器)則是對(duì)象。它們是被封裝起來(lái)的、組合了屬性(如能量等級(jí))和能力(如實(shí)施武器攻擊)的聚合體。通常情況下,將這些屬性和能力彼此分開(kāi)討論是沒(méi)有意義的。
幸運(yùn)的是,大多數(shù)現(xiàn)代編程語(yǔ)言允許使用軟件對(duì)象(經(jīng)常簡(jiǎn)稱為對(duì)象)組合數(shù)據(jù)與函數(shù)。對(duì)象的數(shù)據(jù)元素稱為數(shù)據(jù)成員,而對(duì)象的函數(shù)稱為成員函數(shù)。具體例子可以想象一下外星飛行器。外星飛行器可能是游戲程序員定義的一種稱為Spacecraft的新類型的對(duì)象。它包含一個(gè)表示能量等級(jí)的數(shù)據(jù)成員和一個(gè)實(shí)施武器攻擊的成員函數(shù)。實(shí)際上,對(duì)象的能量等級(jí)可能存儲(chǔ)在int型的數(shù)據(jù)成員energy中,且其攻擊的能力定義在名為fireWeapons()的成員函數(shù)中。
同一類型的每個(gè)對(duì)象都有同樣的基本結(jié)構(gòu),因此每個(gè)對(duì)象都有相同的數(shù)據(jù)成員和成員函數(shù)的集合。然而,作為個(gè)體,每個(gè)對(duì)象的數(shù)據(jù)成員都有其各自的值。如果現(xiàn)在有一個(gè)由5個(gè)外星飛行器組成的飛行中隊(duì),每個(gè)飛行器都有其各自的能量等級(jí)。其中一個(gè)飛行器的能量等級(jí)可能為75,而另一個(gè)可能僅為10。即使兩個(gè)飛行器的能量等級(jí)相同,但它們還是獨(dú)立的。它們也可以通過(guò)調(diào)用其成員函數(shù)fireWeapons()讓各自的武器開(kāi)火。外星飛行器的概念如圖3-2所示。
圖3-2 這種外星飛行器定義的表示方式說(shuō)明每個(gè)對(duì)象都有一個(gè)名為energy的數(shù)據(jù)成員和一個(gè)名為fireWeapons()的成員函數(shù)
對(duì)象的妙處在于并不需要知道其實(shí)現(xiàn)細(xì)節(jié)就能使用它們,就像不必在開(kāi)車之前學(xué)會(huì)制造汽車一樣。我們只需要知道對(duì)象的數(shù)據(jù)成員和成員函數(shù),就像只需要知道汽車的方向盤、油門和剎車在哪里一樣。
對(duì)象可以存儲(chǔ)在變量中,就像內(nèi)置數(shù)據(jù)類型一樣。因此,一個(gè)外星飛行器對(duì)象可以存儲(chǔ)在Spacecraft類型的變量中??梢酝ㄟ^(guò)將成員選擇運(yùn)算符(.)置于對(duì)象變量名之后來(lái)訪問(wèn)數(shù)據(jù)成員和成員函數(shù)。如果希望外星飛行器ship只有在能量等級(jí)大于10時(shí)開(kāi)火,可以按如下方式編寫代碼:
// ship is an object of Spacecraft type
if (ship.energy > 10)
{
ship.fireWeapons()
}
ship.energy訪問(wèn)對(duì)象ship的數(shù)據(jù)成員energy,而ship.fireWeapons()調(diào)用對(duì)象的成員函數(shù)fireWeapons()。
盡管到現(xiàn)在還沒(méi)有介紹如何創(chuàng)建自己的新類型(如外星飛行器),但可以使用前面已定義好的對(duì)象類型。這就是接下來(lái)要介紹的內(nèi)容。