繼承、封裝、多態是面向對象編程最主要的三個特徵,有人說多態是理解C++最難理解的一部分,其實我以爲單單從技術上講,多態並不難,難的是你須要懂得在什麼時候使用多態,就像封裝同樣,封裝自己不難,難的是你對整個事物和需求的理解,以及如何封裝會更好。ios
多態的最簡單使用:關鍵字virtual,虛函數是實現多態最核心的概念;記住一句話,父類的指針指向子類的對象。這是實現多態最基本的要領。編程
舉個最簡單的例子:函數
父類:Base, 兩個子類:firstChild, secondChild;spa
Base.h指針
#include <iostream>對象
class Base {繼承
public:io
virtual void shoot() {面向對象編程
std::cout<<"base shoot......"<<std::endl;class
}
}
firstChild.h
#include <iostream.h>
#include "Base.h"
class firstChild : public Base {
public :
virtual void shoot() {
std::cout<<"firstChild shoot ......"<<std::endl;
}
}
secondChild.h
#include <iostream>
#include "Base.h"
class secondChild : public Base {
public:
virtual void shoot(){
std::cout<<"secondChild shoot......"<<std::endl;
}
}
在main函數裏面調用
#include "Base.h"
#include "firstChild.h"
#include "secondChild.h"
int main(int argc, const char * argv[]){
Base * first = new firstChild(); //父類的指針指向子類的對象
Base * seconf = new secondChild();
first->shoot(); //子類若是覆蓋了父類的虛函數,則調用子類的,若是沒有覆蓋,則調用父類的;
second->shoot();
return 0;
}
輸出結果:
firstChild shoot......
secondChild shoot ......