设为首页 加入收藏

TOP

C语言中通过函数指针实现函数重载
2014-11-24 11:27:58 来源: 作者: 【 】 浏览:2
Tags:言中 通过 函数 指针 实现 重载

我们都知道重载是c++面向对象的特性。c语言中是不存在的。所谓重载简单来说就是一个函数名可以实现不同的功能,要么输入参数不同或者参数个数不同,要么返回类型不同。例如函数add(),在c++中可以轻易实现int,double等不同类型参数的相加功能,而在c语言中却不能这样实现。c语言中实现重载功能,或者准确来说是类似重载的功能,可以通过函数指针的方式来实现。


下面为演示代码:


typedef struct _int_param {
int param1;
int param2;
}INT_PARAM;


typedef struct _double_param_ {
double param1;
double param2;
}DOUBLE_PARAM;



typedef void* (*ADDFUNC)(void*);


void* int_add_func(void* wParam)
{
INT_PARAM* lParam = (INT_PARAM*)wParam;
int res = lParam->param1 + lParam->param2;
return (void*)&res;
}


void* double_add_func(void* wParam)
{
DOUBLE_PARAM* lParam = (DOUBLE_PARAM*)wParam;
double res = lParam->param1 + lParam->param2;
return (void*)&res;
}


void* add_func(ADDFUNC f, void* wParam)
{
return f(wParam);
}


int test()
{
INT_PARAM val1 = {10, 20};


DOUBLE_PARAM val2 = {30.5, 40.5};


void* res1 = add_func(int_add_func, &val1);
int result1 = *((int*)res1);
void* res2 = add_func(double_add_func, &val2);
double result2 = *((double*)res2);



return 0;
}


其实欲实现类似C++中的函数重载,在C中常常将参数类型加到函数名当中,如add_int,add_float等等。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇正则表达式30分钟入门教程 下一篇C语言中变长数组引发的思考

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)