#include<iostream>
using namespace std;
//英雄类,1999年版本的英雄
class Hero
{
public:
virtual int getAd()//攻击力。父类必须要写virtual
{
return 10;
}
};
class AdvHero :public Hero
{
public:
virtual int getAd()//其实这里的virtual是起注释的作用,不写也可以,一般写上
//但父类的必须要写virtual
{
return 1001;
}
};
//怪兽类,1999年版本的怪兽
class Monster
{
public:
int getAd()
{
return 1000;
}
};
//英雄类,2020版本的英雄
class BugHero :public Hero
{
public:
virtual int getAd()
{
cout << "调用了bugHero的方法" << endl;
return 666666666666;
}
};
//战斗方法,1999年版本的架构函数,使用多态,可以调用未来
void playfight(Hero *hp,Monster *mp)
{ //多态对于编译器来讲,也是一个动态联编,也是一个迟绑定
if (hp->getAd() > mp->getAd()) //hp->getAd 发生了多态
{
cout << "英雄胜利,怪兽被打死" << endl;
}
else
{
cout << "英雄挂了,怪兽赢了" << endl;
}
}
//多态的好处在于,可以在后期程序进行拓展时,
//使用原有架构,进行很方便的程序拓展。
int main()
{
Hero h;
Monster m;
h.getAd();
playfight(&h,&m);
AdvHero adv;
playfight(&adv,&m);
BugHero bh;
playfight(&bh,&m);
return 0;
}
输出结果:
总结:
多态时,父类的方法必须要写virtual,其实子类的成员函数virtual是起注释的作用,不写也可以,一般写上。
多态的好处在于,可以在后期程序进行拓展时,使用原有架构,进行很方便的程序拓展。