免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2835 | 回复: 9
打印 上一主题 下一主题

linux下C语言完全模拟C++ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-26 19:15 |只看该作者 |倒序浏览
本帖最后由 z85525006 于 2011-10-26 19:17 编辑
  1. /*
  2.   Linux下C语言完全模拟C++类
  3.   简约软件开发小组  作者:暴风
  4.   QQ:356752238
  5.   邮箱:qiu_hai_long@sina.com
  6.   2011年10月26日 19:00
  7. */

  8. #include <stdio.h>
  9. #include <stdlib.h>

  10. typedef struct _BUTTON Button;

  11. //将参数传给 edx,保存地址!!
  12. #define  _this(_Gtk_gtk)    asm(""::"d"(_Gtk_gtk))
  13. //获取edx中保存的地址, 传给this保存!!
  14. #define  This_Init(_Gtk) _Gtk *this; \
  15.   asm("":"=d"(this))
  16.   
  17. Button *this(Button *t); //转换函数
  18. void _width(int w);

  19. struct _BUTTON
  20. {
  21.   int button_width;
  22.   int button_height;
  23.   void (*width)();
  24. };
  25. Button *new_button()
  26. {
  27.   Button *this;
  28.   this = (Button*)malloc(sizeof(Button));
  29.   this->button_width  = 0;
  30.   this->button_height = 0;
  31.   this->width         = _width;
  32.   return this;
  33. }

  34. int main(int argc, char *argv[])
  35. {
  36.   Button *button1;
  37.   button1 = new_button(); //实例化和构造
  38.   this(button1)->width(30);
  39.   printf("button的宽度为:%d\n",button1->button_width);
  40.   return 0;  
  41. }

  42. //转换函数
  43. Button *this(Button *t)

  44. {

  45.   Button *this = t;

  46.   _this(this);

  47.   return this;

  48. }

  49. void _width(int w)
  50. {
  51.   This_Init(Button);
  52.   this->button_width = w;
  53. }
复制代码
如果需要实现 private public
可以在 结构体里面
#ifndef PRIVATE
int a;
int b;
#endif

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2011-10-26 21:09 |只看该作者
linux 下面本来就有 c++ 编译器,这个所谓的模拟有意义么?

论坛徽章:
0
3 [报告]
发表于 2011-10-26 21:16 |只看该作者
回复 2# snow888


   我这个是C语言的程序!! 面向对象的实现!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2011-10-26 22:02 |只看该作者
本帖最后由 snow888 于 2011-10-26 22:04 编辑
回复  snow888


   我这个是C语言的程序!! 面向对象的实现!
z85525006 发表于 2011-10-26 21:16



    试着运行了一下,出现段错误。

貌似问题出在这里。

  1. void _width(int w)
  2. {
  3.   This_Init(Button);
  4.   this->button_width = w;
  5. }
复制代码
this->button_width = w;

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
5 [报告]
发表于 2011-10-27 10:19 |只看该作者
有C++了,就不要这么搞了吧,容易伤到

论坛徽章:
0
6 [报告]
发表于 2011-10-27 15:17 |只看该作者
回复 5# crazyhadoop


    没有,主要是为了在一些应用上用到而已!!C语言编程的环境!

论坛徽章:
0
7 [报告]
发表于 2011-10-27 15:19 |只看该作者
回复 4# snow888


    你用的GCC编译器吗?不会吧!我是在GCC环境下反汇编的,是根据GCC内部的格式来定义THIS指针,好让不传结构体也能给结构体 赋值!从而真正的实现面向对象的思想和美观!
就不用   aa->func(aa,3,4);
           aa->func(3,4); 就可以了!
  主要是有些环境是需要用到C语言,又要用到面向对象思想!

论坛徽章:
0
8 [报告]
发表于 2011-10-27 15:22 |只看该作者
话说,挺高深的。。哈哈

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2011-10-27 20:57 |只看该作者
回复  snow888


    你用的GCC编译器吗?不会吧!我是在GCC环境下反汇编的,是根据GCC内部的格式来定义 ...
z85525006 发表于 2011-10-27 15:19



    肯定是 gcc 撒,不过俺的是 64 位的编译器,不是 32 位的编译器。

论坛徽章:
0
10 [报告]
发表于 2011-10-28 10:57 |只看该作者
回复 9# snow888


    难道64位的机器和32位的机器不一样!郁闷... ...
   要是这样的话,我要从新定义 64位和32位的才可以拉``` 哦NO!谢谢你阿`` 不然我都不知道```
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP