多态|C++

多态

多态按字面的意思就是多种形态。

当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。

C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。

 简单地说,多态意味着单个函数可以有多个不同的实现。

接下来我们将用例子来更清晰的了解多态。

假设我们现在要制作一个简单的游戏,游戏需要先创建一个角色,角色可以选择很多种不同的职业:法师,战士,射手等。但是这些职业有一个共同的功能就是攻击。不过由于职业性质的不同攻击的方式也会不一样,在这种情况下,多态允许在不同的对象上调用相同的攻击函数,但会导致不同的行为

第一步是创建角色    

class Role {
 protected: 
  int attackPower;
 public:
  void setAttackPower(int a){
   attackPower = a;
  }
};

 我们的Role类有一个名为setAttackPower的公共方法,它设置受保护的成员变量attackPower。

接下来我们为两个不同的职业,战士和法师创建类。这两个类都将继承Role类,所以他们都有attackPower(攻击力),但是他们又都有自己特定的攻击方式。

class Warrior: public Role{
 public:
  void attack() {
   cout << "剑刃风暴! - "<<attackPower<<endl;
  }
};

class Magician: public Role {
 public:
  void attack() {
   cout << "冰暴! - "<<attackPower<<endl;
  }
};

如上所示,他们的攻击方式各不相同。接下来我们准备创建我们的战士和法师的对象。

int main() {   
 Warrior w;
 Magician m;  
}

战士和法师都继承了Role类,所以战士和法师都是角色。所以我们可以实现以下的功能。

Role *r1 = &w;
Role *r2 = &m;

我们现在已经创建了两个Role类型的指针,指向战士和法师的对象。

多态|C++插图

现在,我们可以调用相应的功能:

int main() {
  Warrior w;
  Magician m;
  Role *r1 = &w;
  Role *r2 = &m;

 r1->setAttackPower(50);
 r2->setAttackPower(80);

 w.attack();
 m.attack();
}

/* 输出:
剑刃风暴! - 50
冰暴! - 80
*/

通过直接在对象上调用函数,我们可以达到相同的效果。 但是,使用指针效率更高。

多态|C++插图1

版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=971
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
多态|C++
多态 多态按字面的意思就是多种形态。 当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着调用成员函数时,会根据……
<<上一篇
下一篇>>