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. 常用库

                     

© 小时科技 保留一切权利