多态|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类型的指针,指向战士和法师的对象。
现在,我们可以调用相应的功能:
int main() {
Warrior w;
Magician m;
Role *r1 = &w;
Role *r2 = &m;
r1->setAttackPower(50);
r2->setAttackPower(80);
w.attack();
m.attack();
}
/* 输出:
剑刃风暴! - 50
冰暴! - 80
*/
通过直接在对象上调用函数,我们可以达到相同的效果。 但是,使用指针效率更高。
版权声明:
作者:RHZ
链接:https://www.rhzhz.cn/?p=971
来源:RHZ | 用文字记录工作和学习生活
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论