多态的案例及多态的意义

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


#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是起注释的作用,不写也可以,一般写上。

多态的好处在于,可以在后期程序进行拓展时,使用原有架构,进行很方便的程序拓展。

猜你喜欢

转载自blog.csdn.net/young__fan/article/details/79939808