多态(C++)

#include <iostream>
using namespace std;

class HeroFighter
{
public:
    virtual    int power()
    {
      return 10;
    }
};

class EnemyFighter
{
public:
      int attack()
      {
         return 15;
      }
};

class AdvHeroFighter:public HeroFighter
{
public:
    int power()
    {
      return 20;
    }
};

class AdvHeroFighter2:public HeroFighter
{
public:
    int power()
    {
      return 4;
    }
};

void PlayObj(HeroFighter *hf,EnemyFighter *ef)
{
    if(hf->power()>ef->attack())
    {
      printf("主角win
");
    }
    else
    {
        printf("主角挂了、
");
    }
};

//多态的思想
//面向对象3大概念
//封装:突破C函数的概念... 用类做函数参数的时候,可以使用对象的属性和对象的方法
//继承:A B代码复用
//多态:可以使用未来。

//多态很重要
//实现多态的三个条件
//C语言 间接赋值 是指针存在的最大意义
//是c语言的特有的现象(1、定义两个变量 2、建立联系 3、*p在被调用函数中去间接修改实参的值)

//1要有继承
//2要有虚函数重写
//3、用父类指针(父类引用)指向子类对象

int main()
{
    HeroFighter hf;
    AdvHeroFighter Advhf;
    EnemyFighter ef;

    AdvHeroFighter2 advhf2;

    PlayObj(&hf,&ef);
    PlayObj(&Advhf,&ef);
    PlayObj(&advhf2,&ef);


}
void mainqq()
{
    HeroFighter hf;
    AdvHeroFighter Advhf;
    EnemyFighter ef;

    if(hf.power()>ef.attack())
    {
        printf("主角win
");
    }
    else
    {
         printf("主角挂了
");
    }

    if(Advhf.power()>ef.attack())
    {
        printf("adv主角win
");
    }
    else
    {
         printf("adv主角挂了
");
    }



  cout<<"hello.."<<endl;
}
原文地址:https://www.cnblogs.com/GIScore/p/5322431.html