OOP中的成员与子类

时间:2013-05-26 22:10:54

标签: c++ oop

几年前,我决定通过编写基于文本的RPG游戏来记住我在面向对象编程课程中学到的东西。我不确定我是否希望能完成这项工作,而且我并不在乎。我只是想重新学习如何编写程序。

在记住函数,数据类型和类如何在C ++中工作的基础之后,我编写了以下代码。

class Character
{
      string Name;

public:
       Character()
       {
           Name = "Charname";
       }

       string GetName(){return Name;}
       void SetName(string sName){Name=sName;}
};

现在我想让我的角色参加比赛。第一个想法是创建类Character的子类,每个允许的种族一个。在我看来,这就像在面向对象编程中要做的事情。但我开始思考它是如何工作的。我希望能够说出“如果汤姆是人,克拉拉是兽人,汤姆和克拉拉试图结婚,给出错误信息”。我可能也希望人类和兽人有不同的方法来做不同的事情。

在我看来,广义上,在前者中,我想将Race视为Character的成员(我理解为属性),而在前者中,如果它是子类

如果Human是Character的子类,前者甚至可以做吗?也就是说,一个对象可以知道它所在的类吗?

我该怎么办?为什么?

1 个答案:

答案 0 :(得分:2)

这个设计问题被称为“专业化”。在这种情况下,您希望Race成为属性,而不是子类,因为所有种族的行为基本相同。如果比赛赋予所有比赛统一的特殊能力处理能力。例如,想象一下只有一些种族可以在黑暗中看到,这就是你如何做到的:

int getVisionRange( int iCurrentLightLevel ){
    if( iCurrentLightLevel < LightLevel.DIM ){
       if( this.race == ORC || this.race == ELF ){
           return VisionRange.GOOD;
       } else {
           return VisionRange.NONE;
       }
    } else {
       return MAX_VISION_RANGE;
    }
}

或类似的东西。