码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-01-19 15:47:55      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:指针函数   函数指针   数组   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

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

期待您不吝赐教!

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

标签:指针函数   函数指针   数组   c语言多态   

原文地址:http://blog.csdn.net/yjbqzsf/article/details/42872811

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!