| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1687 人关注过本帖
标题:为结构添加方法
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
 问题点数:0 回复次数:24 
为结构添加方法
程序代码:
#include <stdio.h>
typedef void (*printDel)();
typedef struct point
{
     int x;
     printDel print;      
}point;
void print(point*);
point* new_point();

point* new_point()
{
     point* tmp=(point*)malloc(sizeof(point));
     tmp->print=print;
     return tmp;
}
void print(point* tmp)
{
     printf("%d",tmp->x);
}

int main(void)
{
    point* xy=new_point();
    xy->x=10;
    xy->print(xy);
    free(xy);
    getch();
    return 0;    
}



想实现如此的:xy->print()不知有解决之道否?
搜索更多相关主题的帖子: 结构 
2008-06-17 14:26
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
我没办法解决this指针的传递问题

[[it] 本帖最后由 leeco 于 2008-6-17 14:57 编辑 [/it]]
2008-06-17 14:54
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
呵呵...我知道C从语言特性方面不是面向对象的...
只是我突发奇想,试探在C实现面向对象.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-06-17 14:57
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
大家来研究研究么.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-06-18 08:02
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
有本书,叫《在C中实现面向对象》,论坛某达人发过,你搜搜看?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-20 16:33
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
呵呵,那还不如用C++来得直接,又何苦用C来实现C++的class的功能呢?
不过如果是想研究研究,倒还是支持的。哪天有时间我也来玩玩。

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-20 16:44
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
呵呵...就是想研究研究的...
各位仁兄们最好能来共同研究研究,呵呵...

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-06-20 16:45
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
如果真的想研究,就不要拘泥语法了。
C++的“为类添加方法”其实就是多传了一个this。直接在函数里面传一个this就可以了。
void class_method(...,class* this);
从原理上把握,而不是从语法上。
对于上面的函数,可以写个宏,这样就不用显式传递this了,具体应该很简单,就不写了。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-20 16:50
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
只是,如果用LZ这种方法来模拟class,那VC的“代码自动提示功能”就没用了。
在VC里,当输入函数“(”后VC会自动列出其函数参数,可是LZ这种方法就不会列出了

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-20 16:54
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
注意这种功能不是“面向对象”的一部分,也不会是“面向对象”的优点。
转一篇文:
  即便是在C语言中,add函数被多数C编译器编译后在符号库中的名字也不是add,而是_add。而在C++编译器中,int add(int x,int y)会编译成类似_add_int_int这样的名字(称为“mangled name”),float add(float x,float y)则被编译成_add_float _float,mangled name包含了函数名、函数参数数量及类型信息,C++依靠这种机制来实现函数重载。

  所以,在C++中,本质上int add( int x, int y )与float add( float x, float y )是两个完全不同的函数,只是在用户看来其同名而已。

  这就要求初学者们能透过语法现象看问题本质。本质上,语言的创造者们就是在玩各种各样的花样,以使语言具备某种能力,譬如mangled name花样的目的在于使C++支持重载。而C语言没有玩这样的花样,所以int add( int x, int y )与float add( float x, float y )不能在C程序中同时存在。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-20 16:58
快速回复:为结构添加方法
数据加载中...
 
   



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

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