wikipedia article on C指出Function and data pointers permit ad hoc run-time polymorphism
。函數和數據指針如何允許c中的臨時運行時多態性?
這是什麼意思?請解釋一下。
wikipedia article on C指出Function and data pointers permit ad hoc run-time polymorphism
。函數和數據指針如何允許c中的臨時運行時多態性?
這是什麼意思?請解釋一下。
檢查下面的代碼:
#include <stdio.h>
typedef int (*Func)(int a, int b);
int sum(int a, int b) {
return a + b;
}
int substruct(int a, int b) {
return a - b;
}
int main(int argc, char** argv){
Func f = sum;
printf("%d\n", f(1, 2));
f = substruct;
printf("%d\n", f(1, 2));
}
輸出:
3
-1
這裏我演示瞭如何指針分配不同的功能可以改變程序的行爲。這是一種多態性。
我可以給出的最清晰的答案是提醒你,第一個C++編譯器實際上將C++代碼轉換爲C,然後將該C代碼編譯爲exe。這個實現的遺留物仍然在用於虛擬函數的「vtable」的概念中 - 這只是一個函數指針表,所以類可以改變vtable以調用不同的實現。
在qsort函數中,我可以爲C中的ad-hoc多態性考慮一個例子。 qsort函數將比較函數(函數指針)作爲輸入,從而允許您使用具有不同數據類型的qsort。
的原型的qsort是如下:
void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *));
爲的qsort比較函數的形式爲:
int (*compar)(const void *, const void *);
PLS注意,qsort函數有效地提供僅算法執行的qsort的算法使用的數據類型以及數據類型的比較通過巧妙地使用用於比較功能的函數指針和數據抽象的void *
來抽象。
的qsort提供的功能和數據,從而鋪平了道路使用特設多態的在C.
的+1,只是想着一樣:) – 2012-07-31 05:06:36
可能重複的[I如何可以模擬用C OO風格多態性?](兩者的抽象的示例http://stackoverflow.com/questions/524033/how-can-i-simulate-oo-style-polymorphism-in-c) – AnT 2012-07-31 04:53:29