我有点理解课程是什么,但我不知道他们何时或如何使用

时间:2011-09-07 11:14:02

标签: oop class

我觉得我认为这个课程背后有一个想法,但是我在实际使用它的方式上遇到了很多麻烦。我是在星际争霸或命令与征服之类的游戏环境中考虑它,你有一个类是你的“人族海洋”,与那个类相关的物体都是你生产的真正的人族海军单位?或者更像是类是“单位”,对象是你生成的所有单位?

或者我是以完全错误的方式看待这个?

3 个答案:

答案 0 :(得分:1)

你有点做对了。在OOP中,一切概念都是一个类,每个对象都是一个实例。通过星际争霸的例子,人族海洋是一种本身就是一类的单位。

class Unit
{
    Unit();
    move();
    destroy();
}

class Marine : public Unit
{
    Marine();
    move();
    destroy();
    attack( Unit otherUnit );
}

这只是课程的基本布局。您会看到Unit类中所有单元共有的一些基本命令以及Marine类引入的攻击命令。当然,拥有另一个班CombatUnit更为正确(因为星际争霸中的某些单位不是战斗员),但我希望你能得到一般的想法。

更广泛的例子是:

interface Unit
{
    move();
    destroy();
}
class CombatUnit : public Unit
{
    attack(Unit target);
}
class HealerUnit : public Unit
{
    heal(Unit pacient);
}
class Marine : public CombatUnit
{
    Marine();
    move();
    destroy();
    attack(Unit target);
}
class Medic : public HealerUnit
{
    Medic();
    move();
    destroy();
    heal(Unit pacient);
}

然后你可以有类似的东西:

CombatUnit* marine = new Marine;
HealerUnit* medic = new Medic;
medic->heal(*marine);
marine->attack(*medic);

答案 1 :(得分:0)

第一个答案是正确答案。将课程视为游戏中的抽象事物(通常是名词)。对象是这些类的表现形式。因此,在游戏场景中,您可以将障碍物表示为一个类,并且每个障碍物都成为该类的对象(当然,各种障碍物将是原始障碍类的类型)。

答案 2 :(得分:0)

您的问题非常通用,因为一切都取决于您使用的语言,但所有使用面向对象编程的语言都具有继承的概念,以不同的方式实现。

继承意味着您的类可以从其他类扩展,继承其中的所有属性并添加新属性。

例如:

  • Class Unit,游戏中的所有单位都有一些共同的属性,比如健康,速度等等,所以你可以隔离这个类中的所有常见属性

  • 类Terran Marine,扩展单位等级(所有人族海军陆战队都是单位,但Zergs也是单位),添加新属性(特殊攻击等)并定义人族海军陆战队单位的属性(速度= 10) ,health = 120)

  • 最后你有对象,它们是类的实例,你可以有2个Terran Marines实例(你生成了2个实例),它们具有在Terran Marine类中定义的所有属性(这意味着它们也有来自Unit类的那些