维基百科关于 C 的文章指出Function and data pointers permit ad hoc run-time polymorphism
.
这是什么意思?请解释一下。
维基百科关于 C 的文章指出Function and data pointers permit ad hoc run-time polymorphism
.
这是什么意思?请解释一下。
对于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 多态性铺平了道路。
检查以下代码:
#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 以调用不同的实现。