//多态的威力
//1 playobj给对象搭建一个舞台,看成一个框架
//多态的思想
//封装 突破c函数的概念。。。 用类做函数参数时可以使用对象的属性和方法
//继承 A B 代码复用
//多态 可以使用未来
//多态很重要
//实现多态的三个条件
//C语言间接赋值是指针存在的最大意义
//是C语言特有的现象1、定义两个变量;2、建立关联、 3、*p在被调用函数中间接调用实参的值
//实现多态的三个条件
//一、要有继承;二、要有虚函数重写;三、用父类指针(引用)指向子类对象
#include<iostream>
using namespace std;
class HeroFighter
{
public:
virtual int power()
{
return 10;
}
protected:
private:
};
class EnemyFighter
{
public:
virtual int attack()
{
return 15;
}
protected:
private:
};
class AdvHeroFighter : public HeroFighter
{
public:
virtual int power()
{
return 20;
}
protected:
private:
};
class AdvAdvHeroFighter : public HeroFighter
{
public:
virtual int power()
{
return 20;
}
};
//多态的威力
//1 playobj给对象搭建一个舞台,看成一个框架
//多态的思想
//封装 突破c函数的概念。。。 用类做函数参数时可以使用对象的属性和方法
//继承 A B 代码复用
//多态 可以使用未来
//多态很重要
//实现多态的三个条件
//C语言间接赋值是指针存在的最大意义
//是C语言特有的现象1、定义两个变量;2、建立关联、 3、*p在被调用函数中间接调用实参的值
//实现多态的三个条件
//一、要有继承;二、要有虚函数重写;三、用父类指针(引用)指向子类对象
void playobj(HeroFighter *hf,EnemyFighter *ef)
{
if (hf->power() > ef->attack())//hf->power()这个函数调用产生多态调用
{
printf("主角win\n");
}
else
{
printf("主角挂了\n");
}
}
int main01()
{
HeroFighter hf;
AdvHeroFighter Advhf;
EnemyFighter ef;
if (hf.power() > ef.attack())
{
printf("主角win\n");
}
else
{
printf("主角挂了\n");
}
if (Advhf.power() > ef.attack())
{
printf("ADv主角win\n");
}
else
{
printf("ADv主角挂了\n");
}
system("pause");
return 0;
}
int main()
{
HeroFighter hf;
AdvHeroFighter Advhf;
EnemyFighter ef;
AdvAdvHeroFighter AdvAdvhf;
playobj(&hf,&ef);
playobj(&Advhf,&ef);
playobj(&AdvAdvhf,&ef);
system("pause");
return 0;
}