2012-11-09 55 views
4

我有一个分配重新比赛。我必须实现一个字符列表。例如,我有只有字符名称的Character类。C++的继承字符类

现在,我需要创建一个字符Warrior谁是游戏中的敌人。我是否需要执行如下这样的继承:Character --> Enemy --> Warrior当我的敌人职业基本上没有属性时。这比任何分类都更具有分类性。

有一种方法以具有Enemy并以相同的类中定义的Warrior,其中WarriorEnemy类型,这是Character类型的?将会有更多的敌人,但只有一个Warrior

谢谢

+1

继承不是每个问题的答案。我将拥有一个具有指定字符属性的单个字符类。您正在考虑的类层次结构在C++教科书中比在生产代码中更常见。 – user763305

+1

我们没有足够的信息,我们可能永远不会有。这是一个品味问题。玩家(无论是人类还是人工智能)是否可以扮演“战士”?然后,分类为“敌人”是错误的。真的需要'敌人'吗?可能不会。取而代之的是制作一个'ControllableCharacter'或类似的东西,它可以由人或人物来控制。好的/坏的父类除了提供额外的信息外,通常只会使代码更加复杂。 – Zeta

回答

4

你说的敌人基本上没有属性。

那现在的话,但之所以用一个敌人类和继承之一是它更好地现在建设(几乎)透明的灵​​活性预测未来的代码的未知需求。

当然能敌人类的类型,但是当你添加更多的敌人,你会发现,这种解决方案需要在switch语句和if条款的形式越来越多的代码来检查的类型。

2

如果所有勇士的敌人,有敌人的所有属性,那么是的,是有意义的有战士被敌人的子类。

正如一些评论所指出的,具有复杂的继承链是有问题的和无症状的程序架构差。

有没有办法让敌人和战士在同一个班级中定义,其中战士属于敌人类型,其类型是角色?

在我们讨论的继承链中,战士是一种类型的敌人,它是一种角色类型。

我想你可能会混淆一个类定义它的文件。你不能定义有两种类型的类。您可以在单个.h文件中定义多个类,并在单个cpp文件中实现它们,但从样式角度来看,最好在单个.h/.cpp对中定义一个类。