多型與多型案例
阿新 • • 發佈:2018-12-23
多型的思想
面向物件3大概念
封裝: 突破c函式的概念....用類做函式引數的時候,可以使用物件的屬性 和物件的方法
繼承: A B 程式碼複用
多型 : 可以使用未來...
多型很重要
實現多型的三個條件
好比C語言 間接賦值 是指標存在的最大意義是c語言的特有的現象 (1 定義兩個變數 2 建立關聯 3 *p在被呼叫函式中去間接的修改實參的值)
實現多型的三個條件
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; }