当前位置: 代码迷 >> C语言 >> 为结构添加方法
  详细解决方案

为结构添加方法

热度:312   发布时间:2008-06-17 14:26:14.0
为结构添加方法
程序代码:

#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()不知有解决之道否?
搜索更多相关的解决方案: 结构  

----------------解决方案--------------------------------------------------------
我没办法解决this指针的传递问题

[[it] 本帖最后由 leeco 于 2008-6-17 14:57 编辑 [/it]]
----------------解决方案--------------------------------------------------------
呵呵...我知道C从语言特性方面不是面向对象的...
只是我突发奇想,试探在C实现面向对象.
----------------解决方案--------------------------------------------------------
大家来研究研究么.
----------------解决方案--------------------------------------------------------
有本书,叫《在C中实现面向对象》,论坛某达人发过,你搜搜看?
----------------解决方案--------------------------------------------------------
呵呵,那还不如用C++来得直接,又何苦用C来实现C++的class的功能呢?
不过如果是想研究研究,倒还是支持的。哪天有时间我也来玩玩。
----------------解决方案--------------------------------------------------------
呵呵...就是想研究研究的...
各位仁兄们最好能来共同研究研究,呵呵...
----------------解决方案--------------------------------------------------------
如果真的想研究,就不要拘泥语法了。
C++的“为类添加方法”其实就是多传了一个this。直接在函数里面传一个this就可以了。
void class_method(...,class* this);
从原理上把握,而不是从语法上。
对于上面的函数,可以写个宏,这样就不用显式传递this了,具体应该很简单,就不写了。
----------------解决方案--------------------------------------------------------
只是,如果用LZ这种方法来模拟class,那VC的“代码自动提示功能”就没用了。
在VC里,当输入函数“(”后VC会自动列出其函数参数,可是LZ这种方法就不会列出了
----------------解决方案--------------------------------------------------------
注意这种功能不是“面向对象”的一部分,也不会是“面向对象”的优点。
转一篇文:
  即便是在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程序中同时存在。
----------------解决方案--------------------------------------------------------
  相关解决方案