C语言实现另类“多态”的一种思路

来源:互联网 发布:淘宝上内裤哪个牌子好 编辑:程序博客网 时间:2024/06/04 07:22

上篇博文中通过参数的多样化来实现函数多态特性,然而存在一种实际的场景是参数个数和类型一致的函数,

但是运行过程不同,例如+、-、*、/ 等基本的四则远算,其都是二元远算,且参数类型基本一致,此时该如何多态呢。

我觉得还是有点意思的。多态的目的是减少重复定义,选择最合适的类型自动匹配执行对应函数。

(还有一种是父类对象引用子类实例,但C中没有继承的概念,所以这个不再解释)

说的这么悬乎,我觉得可以使用隐藏函数名的方式来达到预期的效果(仅是一种思路)。

实例如下:

#include <stdio.h>typedef int func_t(int,int);int add(int a, int b){return a+b;};int sub(int a, int b){return a-b;};int mul(int a, int b){return a*b;};int div(int a, int b){return a/b;};void print(int *arr, int len){    int i;    for(i=0;i<len;i++) printf("%d\t",arr[i]);    putchar('\n');}int main(void){    void (*func_p1)(int *,int len);    int (*func_p2[4])(int,int) = {add,sub,mul,div};    func_t *func_p3[4] = {add,sub,mul,div}; // equals with func_p2    int array[]={1,22,3,44,5,66};    func_p1 = print;    func_p1(array,sizeof(array)/sizeof(int)); // in order to test func point     printf("%d\t%d\t%d\t%d\n",func_p2[0](2,1),func_p2[1](2,1),func_p2[2](2,1),func_p2[3](2,1));    printf("%d\t%d\t%d\t%d\n",func_p3[0](2,1),func_p3[1](2,1),func_p3[2](2,1),func_p3[3](2,1));    return 0;}

gcc编译

$ gcc -o calc calc.c

$ ./calc
1    22    3    44    5    66 --测试函数指针的使用   
3    1    2    2                     --使用func_p2指针函数实现2+1 | 2-1 | 2*1 | 2/1
3    1    2    2                     --使用func_p3函数指针数组实现2+1 | 2-1 | 2*1 | 2/1

小结:
对于另类的多态 -- 参数相同(个数和类型)采用隐藏函数名的思路实现。

期待您不吝赐教!

0 0
原创粉丝点击