多態是C++的三大法器之一,此處我們用C模擬多態,加深對C++的多態的理解 ...
函數指針原型:int (*myFuncVar)(int a, int b) ;
1.什麼叫函數指針,我們來做個對比:
1)這是我們常見普通的指針定義變數:
int a=10;
int *p = &a;
2)再看此例子:
int ADD(int a,int b); //定義帶參函數
int (*myFuncVar)(int a, int b) ; // 定義帶參數的函數指針,指針變數名為myFuncVar
myFuncVar = ADD; // myFuncVar變數名指向函數名,函數名即是函數的首地址,是我們找到這個函數地點的門牌號
上面也等價:
int ADD(int a,int b);
int (*myFuncVar)(int a, int b) = ADD;// 有沒有類似 int *p =&a 啊,答案是的
不知您是否理解沒,不行您就這樣看:
int (*myFuncVar)(int a, int b) = ADD ==》 int * myFuncVar = ADD 只不過是 myFuncVar不是普通的變數名,而是專門用來指向別的函數的變數,它帶著兩個參數 int a 與 int b,這樣我們就補充完整去: int * myFuncVar(int a,int b) = ADD; 這隻是為了我們方便理解,因為其中存在著優先順序問題,所以是這個醜樣:
int (*myFuncVar)(int a, int b) = ADD 。
2.作用:(我們上例子)
#include<stdio.h>
int max(int x,int y){return (x>y? x:y);} // 定義帶參數max函數
int main()
{
int (*ptr)(int, int); // 定義函數指針變數ptr,參數為兩個int型數據
int a, b, c;
ptr = max;
scanf("%d%d", &a, &b);
c = (*ptr)(a,b);
printf("a=%d, b=%d, max=%d", a, b, c);
return 0;
}
由此可見函數指針能用來:①做回調,方便修改函數 ② 用來找到函數的地點
//-----------------------------------------------------------------------------------------------------------------------------------------------------
再講多態,C++里,多態是用一個函數執行調用在多個與他有關係的函數中指定的函數,這個指定的函數是由傳入的對象決定的