前几节的例子演示了派生类与基类指针的使用方法。接下来我们接着之前游戏的例子,我们的每一个角色都有一个attack()函数。
为了能够让Role指针为每一个派生类提供调用attack()函数,我们需要在基类将函数声明成抽象函数。
在基类中声明一个抽象函数,在派生类中使用相应的函数,多态允许使用Role指针来调用派生类的函数。
每个派生类将覆盖attack()函数并有一个单独的实现:
class Role{
public:
virtual void attack() {
}
};
class Warrior: public Role {
public:
void attack() {
cout << "剑刃风暴!"<<endl;
}
};
class Magician: public Role {
public:
void attack() {
cout << "冰暴!"<<endl;
}
};
通过关键字virtual可以将基类的函数声明成抽象函数。
现在,我们可以使用Role指针来调用attack()函数。
int main() {
Warrior w;
Magician m;
Role *r1 = &w;
Role *r2 = &m;
r1->attack();
r2->attack();
}
/* 输出:
剑刃风暴!
冰暴!
*/
由于attack()函数被声明为抽象的,它就像一个模板,告诉派生类自己有一个attack()函数。
我们通过游戏的例子来演示多态的概念,我们使用Role指针调用相同的attack()函数,并生成不同的结果。
r1->attack();
r2->attack();
如果基类中的函数是抽象的,则派生类中的函数实现将根据所引用对象的实际类型进行调用,而不管原先声明的是那种类型。
声明或者继承了一个抽象函数的类被称为一个多态类。

文章评论
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>