在前面的章节,我们学会了如何编写一个完整的类。然而,面向对象的优势还没有被完全体现出来。特别是在编写一些相似的类时,可能会造成很多的浪费。本章就将以一个文字游戏为例,向大家介绍类的继承问题。
这样看来,我们有麻烦了。如果只用一个类来描述三种不同职业的玩家,肯定无法描述清楚。毕竟这三种职业不是完全相同的。如果用三个类来描述这三种职业,那么三者的共同点和内在联系就无法体现出来,并且还造成了相同属性和功能的重复开发。
我们需要有一种好的方法,既能把剑士、弓箭手和法师的特点描述清楚,又能减少重复的开发和冗余的代码。在C++中,有一种称为继承的方法,使我们可以用一种已经编写好的类来扩写成一个新的类。新的类具有原有类的所有属性和操作,也可以在原有类的基础上作一些修改和增补。继承实质上是源于人们对事物的认知过程:从抽象概念到具体事物。下面我们就来看看剑士、弓箭手和法师的逻辑关系:
在上图中玩家是一个抽象的概念,剑士、弓箭手和法师是具体的事物。任何一个玩家都具有生命值、魔法值等属性,具有发动普通攻击和特殊攻击的能力。不同职业的玩家在发动普通攻击和特殊攻击时,有着不同的效果。
剑士·弓箭手·法师的困惑
在一个角色扮演类游戏(RPG)中,可能有各种不同职业的玩家,比如剑士、弓箭手和法师。虽然他们的职业不同,却有着一些相似之处:他们都具有生命值(Health Point——HP)、魔法值(Magic Point——MP)、攻击力(Attack Point——AP)、防御力(Defense Point——DP)、经验值(Experience——EXP)和等级(Level——LV)。虽然他们有着相似之处,但又不完全相同:剑士和弓箭手都具有普通攻击的技能,只不过剑士用的是剑,而弓箭手用的是弓箭。这样看来,我们有麻烦了。如果只用一个类来描述三种不同职业的玩家,肯定无法描述清楚。毕竟这三种职业不是完全相同的。如果用三个类来描述这三种职业,那么三者的共同点和内在联系就无法体现出来,并且还造成了相同属性和功能的重复开发。
我们需要有一种好的方法,既能把剑士、弓箭手和法师的特点描述清楚,又能减少重复的开发和冗余的代码。在C++中,有一种称为继承的方法,使我们可以用一种已经编写好的类来扩写成一个新的类。新的类具有原有类的所有属性和操作,也可以在原有类的基础上作一些修改和增补。继承实质上是源于人们对事物的认知过程:从抽象概念到具体事物。下面我们就来看看剑士、弓箭手和法师的逻辑关系:
在上图中玩家是一个抽象的概念,剑士、弓箭手和法师是具体的事物。任何一个玩家都具有生命值、魔法值等属性,具有发动普通攻击和特殊攻击的能力。不同职业的玩家在发动普通攻击和特殊攻击时,有着不同的效果。










