多态
多态按字面的意思就是多种形态。
当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。
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
*/
通过直接在对象上调用函数,我们可以达到相同的效果。 但是,使用指针效率更高。

文章评论
Everything is very open with a really clear clarification of the challenges. It was really informative. Your website is extremely helpful. Thank you for sharing!
אני מאוד ממליץ על אתר הזה כנסו עכשיו ותהנו ממגוון רחב של בחורות ברמה מאוד גבוהה. רק באתר ישראל נייט לאדי <a href="https://romantik69.co.il/">נערות ליווי</a>