正文

for循环、字符串与数组(4)

通过游戏编程实战教新手学C++编程 作者:(美)Michael Dawson


3.2  理解对象

到目前为止,已经介绍如何使用变量存储单条信息,以及如何使用运算符和函数对这些变量进行操作。但是游戏中出现的大多数事物(譬如说外星飞行器)则是对象。它们是被封装起来的、组合了属性(如能量等级)和能力(如实施武器攻击)的聚合体。通常情况下,将这些属性和能力彼此分开讨论是没有意义的。

幸运的是,大多数现代编程语言允许使用软件对象(经常简称为对象)组合数据与函数。对象的数据元素称为数据成员,而对象的函数称为成员函数。具体例子可以想象一下外星飞行器。外星飞行器可能是游戏程序员定义的一种称为Spacecraft的新类型的对象。它包含一个表示能量等级的数据成员和一个实施武器攻击的成员函数。实际上,对象的能量等级可能存储在int型的数据成员energy中,且其攻击的能力定义在名为fireWeapons()的成员函数中。

同一类型的每个对象都有同样的基本结构,因此每个对象都有相同的数据成员和成员函数的集合。然而,作为个体,每个对象的数据成员都有其各自的值。如果现在有一个由5个外星飞行器组成的飞行中队,每个飞行器都有其各自的能量等级。其中一个飞行器的能量等级可能为75,而另一个可能仅为10。即使两个飞行器的能量等级相同,但它们还是独立的。它们也可以通过调用其成员函数fireWeapons()让各自的武器开火。外星飞行器的概念如图3-2所示。

图3-2  这种外星飞行器定义的表示方式说明每个对象都有一个名为energy的数据成员和一个名为fireWeapons()的成员函数

对象的妙处在于并不需要知道其实现细节就能使用它们,就像不必在开车之前学会制造汽车一样。我们只需要知道对象的数据成员和成员函数,就像只需要知道汽车的方向盘、油门和刹车在哪里一样。

对象可以存储在变量中,就像内置数据类型一样。因此,一个外星飞行器对象可以存储在Spacecraft类型的变量中。可以通过将成员选择运算符(.)置于对象变量名之后来访问数据成员和成员函数。如果希望外星飞行器ship只有在能量等级大于10时开火,可以按如下方式编写代码:

// ship is an object of Spacecraft type

if (ship.energy > 10)

{

ship.fireWeapons()

}

ship.energy访问对象ship的数据成员energy,而ship.fireWeapons()调用对象的成员函数fireWeapons()。

尽管到现在还没有介绍如何创建自己的新类型(如外星飞行器),但可以使用前面已定义好的对象类型。这就是接下来要介绍的内容。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号