面向對象編程的多態從綁定時間來看,可以分成靜態多態和動態多態,也稱爲編譯期多態和運行期多態。
應用形式上:
靜多態是發散式的,讓相同的實現代碼應用於不同的場合。
動多態是收斂式的,讓不同的實現代碼應用於相同的場合。
思維方式上:
靜多態是泛型式編程風格,它看重的是算法的普適性。
動多態是對象式編程風格,它看重的是接口和實現的分離度。
靜態多態
(1)函數多態(重載):函數名一樣,參數類型或個數不一樣,返回類型可以一樣也可以不一樣。
int max(int x,int y){...}
double max(double x,double y){...}
(2)宏多態:
#define ADD(A,B) (A)+(B);
int a = 1;
int b = 2;
String c = "1";
String d = "2";
輸出ADD(a,b)得到整型數3,輸出ADD(c,d)得到字符串12。
(3)模板
動態多態
(1)繼承和虛函數機制
class A{
public:
virtual ~A(){}
virtual void out(){
cout<<"I am BaseClass."<<endl;
}
};
class B:public A
{
public:
virtual void out(){
cout<<"I am DerivedClass."<<endl;
}
};
int main()
{
A *p=new B;
p->out();
}