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

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

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

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

(还有一种是父类对象引用子类实例,但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

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

期待您不吝赐教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值