几年前,我决定通过编写基于文本的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的子类,前者甚至可以做吗?也就是说,一个对象可以知道它所在的类吗?
我该怎么办?为什么?
答案 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;
}
}
或类似的东西。