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