c++中多态实现的三个条件

#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日
 */

猜你喜欢

转载自blog.csdn.net/baixiaolong1993/article/details/89204076