C 语言的多态

                     

贡献者: addis

预备知识 C 语言笔记

   C 语言的多态可以通过函数指针实现。什么是多态?简单来说就是根据运行时的不同类型数据来决定调用什么函数。

   例如从概念上,我们需要一个数组,但每个元素都可能是不同的类型,且这些类型只有在运行时知道。那么如何写一个函数,对数组的每个元素调用不同的函数呢?且这些函数需要由用户提供。我们可以用 void * 来储存元素数据,再用 int 数组动态表示每个元素的类型。

#include <stdio.h>

typedef void (*Operation)(void*);

void processInt(void* data) {
    int* p = (int*)data;
    printf("Processing int: %d\n", *p);
}

void processFloat(void* data) {
    float* p = (float*)data;
    printf("Processing float: %f\n", *p);
}

void applyFunctions(Operation functions[], int types[], void* data[], int n) {
    for (int i = 0; i < n; i++)
        functions[types[i]](data[i]);
}

int main() {
    int i = 42;
    float f = 3.14;

    void* data[] = {&i, &f};
    int types[] = {0, 1};
    Operation ops[] = {processInt, processFloat};
    applyFunctions(ops, types, data, 2);

    return 0;
}

   C 语言中大量使用看似危险的 void * 来提供一般算法,例如标准库的快排 void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));。该算法不需要知道元素类型,比较元素的函数由用户自行提供。

1. 常用库


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利