#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
using namespace std;
/*
* 虚函数重写与多态实现的三个条件
* HeroFighter AdvHeroFighter EnemyFighter
*/
class HeroFighter//英雄类
{
public:
virtual int power()//c++编译器会对这个函数做特殊的处理
{
return 10;
}
};
class EnemyFighter
{
public:
//敌人类
int attack()
{
return 15;
}
};
class AdvHeroFighter:public HeroFighter
{
public:
virtual int power() override
{
return 20;
}
};
class AdvAdvHerofighter:public HeroFighter
{
public:
virtual int power() override
{
return 30;
}
};
//看看多态威力
//1 PlayObj给对象搭建舞台 看成一个框架(可以封装为库)
//15:20
void PlayObj(HeroFighter*hf,EnemyFighter*ef)//这里使用一个父类来接收所有的子类对象
{
//不写virtual关键字 是静态联编 C++编译器根据HeroFighter类型,去执行 这个类型的power函数 在编译器编译阶段就已经决定了函数的调用
//动态联编: 迟绑定: //在运行的时候,根据具体对象(具体的类型),执行不同对象的函数 ,表现成多态.
if (hf->power()>ef->attack()) //hf->power()函数调用会有多态发生
{
printf("主角色获胜\n");
}
else
{
printf("主角死亡\n");
}
}
//多态的思想
//面向对象3大概念
//封装: 突破c函数的概念....用类做函数参数的时候,可以使用对象的属性 和对象的方法
//继承: A B 代码复用
//多态 : 可以使用未来...(做好接口,未来软件只需要是与接口相对应就行了)
//多态很重要
//实现多态的三个条件
//C语言中,间接赋值是指针存在的最大意义
//是c语言的特有的现象 (1 定义两个变量 2 建立关联(实参取地址传给形式参数) 3 *p在被调用函数中去间接的修改实参的值)
//实现多态的三个条件
//1 要有继承
//2 要有虚函数重写
//3 用父类指针(父类引用)指向子类对象....
int main(void)
{
HeroFighter hf;
AdvHeroFighter hf1;
AdvAdvHerofighter hf2;
EnemyFighter ef;
PlayObj(&hf, &ef);
PlayObj(&hf1, &ef);
PlayObj(&hf2, &ef);//又新加一个战机,这个框架 能把我们后来人写的代码,给调用起来
system("pause");
return 0;
}
/*
* 主角死亡
主角色获胜
主角色获胜
请按任意键继续. . .
10点18分
2019年4月11日
*/
c++中多态实现的三个条件
猜你喜欢
转载自blog.csdn.net/baixiaolong1993/article/details/89204076
今日推荐
周排行