多态的用途
通過上面的例子讀者可能還未發現多態的用途,不過確實也是,多態在小項目中鮮有有用武之地。
接下來的例子中,我們假設你正在玩一款軍事游戲,敵人突然發動了地面戰爭,于是你命令陸軍、空軍及其所有現役裝備進入作戰狀態。具體的代碼如下所示:
#include <iostream> using namespace std; //軍隊 class Troops{ public:virtual void fight(){ cout<<"Strike back!"<<endl; } }; //陸軍 class Army: public Troops{ public:void fight(){ cout<<"--Army is fighting!"<<endl; } }; //99A主戰坦克 class _99A: public Army{ public:void fight(){ cout<<"----99A(Tank) is fighting!"<<endl; } }; //武直10武裝直升機 class WZ_10: public Army{ public:void fight(){ cout<<"----WZ-10(Helicopter) is fighting!"<<endl; } }; //長劍10巡航導彈 class CJ_10: public Army{ public:void fight(){ cout<<"----CJ-10(Missile) is fighting!"<<endl; } }; //空軍 class AirForce: public Troops{ public:void fight(){ cout<<"--AirForce is fighting!"<<endl; } }; //J-20隱形殲擊機 class J_20: public AirForce{ public:void fight(){ cout<<"----J-20(Fighter Plane) is fighting!"<<endl; } }; //CH5無人機 class CH_5: public AirForce{ public:void fight(){ cout<<"----CH-5(UAV) is fighting!"<<endl; } }; //轟6K轟炸機 class H_6K: public AirForce{ public:void fight(){ cout<<"----H-6K(Bomber) is fighting!"<<endl; } }; int main(){Troops *p = new Troops;p ->fight();//陸軍p = new Army;p ->fight();p = new _99A;p -> fight();p = new WZ_10;p -> fight();p = new CJ_10;p -> fight();//空軍p = new AirForce;p -> fight();p = new J_20;p -> fight();p = new CH_5;p -> fight();p = new H_6K;p -> fight();return 0; } Strike back! --Army is fighting! ----99A(Tank) is fighting! ----WZ-10(Helicopter) is fighting! ----CJ-10(Missile) is fighting! --AirForce is fighting! ----J-20(Fighter Plane) is fighting! ----CH-5(UAV) is fighting! ----H-6K(Bomber) is fighting!這個例子中的派生類比較多,如果不使用多態,那么就需要定義多個指針變量,很容易造成混亂;而有了多態,只需要一個指針變量 p 就可以調用所有派生類的虛函數。
從這個例子中也可以發現,對于具有復雜繼承關系的大中型程序,多態可以增加其靈活性,讓代碼更具有表現力。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: C++多态和虚函数
- 下一篇: c++ 纯虚函数和抽象类那些事(一)