1. 程式人生 > >多型與多型案例

多型與多型案例

多型的思想
面向物件3大概念
封裝: 突破c函式的概念....用類做函式引數的時候,可以使用物件的屬性 和物件的方法
繼承: A B 程式碼複用
多型 : 可以使用未來...

多型很重要
實現多型的三個條件
好比C語言 間接賦值 是指標存在的最大意義是c語言的特有的現象 (1 定義兩個變數  2 建立關聯  3 *p在被呼叫函式中去間接的修改實參的值)

實現多型的三個條件
1 要有繼承

2 要有虛擬函式重寫

3 用父類指標(父類引用)指向子類物件....

多型案例

#include <iostream>
#include <cstdio>
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()
	{
		return 20;
	}
};

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

//多型威力
//1 PlayObj給物件搭建舞臺  看成一個框架
//在還沒有advadvHeroFighter類的時間是15:20,之後,我再建立一個advadvHeroFighter類,而PlayObj函式不需要做任何改變,這就是多型可以呼叫未來的威力
void PlayObj(HeroFighter *hf, EnemyFighter *ef)
{
	//不寫virtual關鍵字 是靜態聯編 C++編譯器根據HeroFighter型別,去執行 這個型別的power函式 在編譯器編譯階段就已經決定了函式的呼叫
	//動態聯編: 遲繫結:  //在執行的時候,根據具體物件(具體的型別),執行不同物件的函式 ,表現成多型.
	if (hf->power() > ef->attack())  //hf->power()函式呼叫會有多型發生
	{
		printf("主角win\n");
	}
	else
	{
		printf("主角掛掉\n");
	}
}

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

	AdvAdvHeroFighter advadvhf;

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

	PlayObj(&advadvhf, &ef) ; //這個框架 能把我們後來人寫的程式碼,給呼叫起來

	cout<<"hello..."<<endl;
	return 0;

}