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
- C语言实现另类“多态”的一种思路
- 实现编号查询的另类思路
- 【转】C语言函数实现的另类方法
- C语言中生成随机数的另类实现
- 安卓换肤的一种实现思路
- c语言 strtok strtok_r的一种实现
- 一种有限状态机的C语言实现
- 整理:一种有限状态机的C语言实现
- C 语言单例的一种实现
- 反编译的另类思路
- C语言的思路!
- 另类解读C语言数组的特性
- C语言的另类结构体赋值
- C语言的另类结构体赋值
- 另类解读C语言数组的特性
- C语言读取配置文件的另类写法
- 另类解读C语言数组的特性
- C语言字符串的另类用法
- Redis 教程
- 老师不会玩网络,全国优秀也枉然
- 关于java toString方法的自动调用
- C语言指针5分钟教程
- mysql 表锁演示
- C语言实现另类“多态”的一种思路
- mysql 行锁演示
- 谷歌的一个工具,专门抓堆埙的
- Android代码开启ActionBar显示效果
- 许晓斌_Maven实战(八)——常用Maven插件介绍(下)
- 改变Activity背景颜色
- iOS自动化测试之UIAutomation
- iOS-Core-Animation之九----图层时间
- Response.AddHeader使用实例