wikipedia article on C表示Function and data pointers permit ad hoc run-time polymorphism
。
这是什么意思?请解释。
答案 0 :(得分:4)
我可以在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 *);
请注意,qsort函数有效地仅提供qsort算法的算法实现,留下要使用的数据类型,并通过巧妙地使用函数指针进行比较函数和用于数据抽象的void *
来抽象数据类型的比较
qsort提供了一个抽象函数和数据的例子,从而为在C中使用ad-hoc多态性铺平了道路。
答案 1 :(得分:3)
检查以下代码:
#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
这里我演示了如何为指针分配不同的函数可以改变程序的行为。这是一种多态性。
答案 2 :(得分:2)
我能给出的最清楚的答案是提醒您,第一个C ++编译器实际上将C ++代码转换为C,然后将该C代码编译为exe。
这种实施的遗迹仍然在&#34; vtable&#34;的概念中徘徊。用于虚函数 - 它只是一个函数指针表,因此类可以更改vtable以调用不同的实现。