| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:关于函数重载的问题,换个地方发,我就不信没人鸟我~~~~~
只看楼主 加入收藏
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
关于函数重载的问题,换个地方发,我就不信没人鸟我~~~~~
我定义了几个结构体,A、B、C
分别构成了三个链表,现在我要释放他们,对于A,我可以写函数
void freeA(A *pHead)
{
    A* p = pHead;
    A* q;
    while(NULL != p )
    {
        q = p->next ;
        free(p);
        p = q;
    }
    return;
}
释放B链表时再写一个同上的函数,但A全改成B
使用时,调用的是同一个函数名,但由于重载,传递的参数类型不同编译器就会知道调用哪个函数了
但因为三个函数结构功能都是一样的,我在想可不可以只写一个FreeLink函数,让它自动判断是什么结构体类型
(或者不用判断,直接释放指针指向的结构体块),而不用写三个同名不同参函数。
各位大神,帮帮忙,说不定有知道的,能让我优化一下自己的程序,谢谢
搜索更多相关主题的帖子: 结构体 编译器 return 
2012-08-25 17:55
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:7 
你三个不一样的结构体,那样传参的话估计类型不匹配警告,你可以考率这样写 void Freelink(void *head, int flag),用flag来标识你的链表类型,再用switch做A,B,C三种选择释放,必把void *head 做强转, 即(A *)head  ....
2012-08-25 18:51
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:7 
用泛型。C++中叫模板。C语言里就不要考虑这个问题了。

重剑无锋,大巧不工
2012-08-25 18:58
会分手的空气
Rank: 2
来 自:湖北孝感
等 级:论坛游民
帖 子:26
专家分:32
注 册:2012-3-30
收藏
得分:7 
你想用的不叫函数的重载,而是C++的类模板,你可以定义一个类模板函数,然后调用就行了。
2012-08-25 19:11
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:0 
谢谢各位了,我用的是VC++,所以可以使用模板,之前不太经常使用到模板,都快忘记了,谢谢提醒
因为这个函数中我又要将链表释放节点里面存储的数据打印出来,而且每种数据的名称不一样,
就不可能使用模板了,所以我又在模板中调用了几个重载函数,也是可行的,谢谢各位了,散分,先到的多得一分
散分结贴怎么多出一分,难道是系统给的

[ 本帖最后由 stophin 于 2012-8-25 20:35 编辑 ]
2012-08-25 20:33
快速回复:关于函数重载的问题,换个地方发,我就不信没人鸟我~~~~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019132 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved