免费注册 查看新帖 |

Chinaunix

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

[C] 用 C 语言实现面向对象编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-08 11:21 |只看该作者 |倒序浏览
一、类的封装实现:借用高焕堂的宏头文件,类很容易封装为如下的格式1、类的定义,其中 CLASS()  是 lw_oopc_kc.h 中定义的宏#include "lw_oopc_kc.h" CLASS(A)
    { int a; void(*init)(void*,int); void(*put)(void*);};2、成员函数的实现类的封装实质是用借用 struct  结构体,用函数指针来表示 C 中类的方法(成员函数)。接下来给类 A 的方法写实体函数。
    void init_A(void *t,int x)
    { A *cthis = (A*)t;cthis->a = x;} void put_A(void*t)
    { A *cthis = (A*)t;printf(" %d ",cthis->a);} 3、类(结构体)中的函数指针与实现函数的关联 通过下面的宏把类的方法(函数指针)和实现函数关联:CTOR(A)
    FUNCTION_SETTING (init, init_A); FUNCTION_SETTING (put, put_A);END_CTOR 4、对象的定义、构造和初始化如果没有这个连接处理,类(实际是 struct)中的函数指针就没有函数的功能。函数 init_A()是 XXX_A()  的命名模式,是指明 XXX_A()属于 A 类的函数,方便程序的理解和维护。下面就是要构造 类。在 C 中这个工作系统自动调用构造函数实现而在 C  中,这个过程智能显示调用来实现。借助 lw_oopc_kc.h (或"lw_oopc.h")可以利用宏 CLASS_CTOR(class,obj)来将定义的对象进行构造,使之 有数据的同时有方法的功能。实例化一个对象 3 步子如下:A   aa1;                           // 1、定义对象CLASS_CTOR(A,aa1);       // 2、构造对象—使得函数指针和函数关联aa1.init(&aa1, 10);               // 3、初始化对象的成员变量,注意要: &aa1(取地址)
    二、C 继承的实现:1、子类的定义:在类的开头借用已经定义的类进行定义一个变量,为了更加明白,表明是继承,增加一个宏定义:#define INHERIT(BASE)    IMPLEMENTS(BASE)
    于是以类 B 继承类 A 为例子如下:CLASS(B)
    { INHERIT(A);              //  继承 A 类 int b;                                   //  子类的成员 void (*init) (void*, int x);void (*put) (void*);};2、子类的成员函数实现,为了方便辨别,类 B 的成员函数带后缀 ‘_B’void init_B (void*t, int x, int y)
    { B *cthis =   (B*) t;CLASS_CTOR(A, cthis->A);               //——继承的基类在这里构造,对象是 cthis->A cthis->A.init(&cthis->A, x);                //——</SPA< div>
此文出自:中国IT实验室之软件月刊

论坛徽章:
0
2 [报告]
发表于 2011-11-08 12:32 |只看该作者
这是何苦

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2011-11-08 12:34 |只看该作者
这是何苦
狗气球 发表于 2011-11-08 12:32



    这是广告,而且是不合格的广告。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
4 [报告]
发表于 2011-11-08 12:36 |只看该作者

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
5 [报告]
发表于 2011-11-08 17:50 |只看该作者
從 OOC 抄出來的?

论坛徽章:
0
6 [报告]
发表于 2011-11-10 16:44 |只看该作者
貌似看不懂这个 呵呵

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
7 [报告]
发表于 2011-11-10 17:02 |只看该作者

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2011-11-10 18:14 |只看该作者
不如OIOIC啊

论坛徽章:
0
9 [报告]
发表于 2011-11-10 18:28 |只看该作者
弱爆了,看来真不如OIOIC。。
话说在贴吧这种广告好像也没乱掉,为什么到这里格式就这么奇葩了?

论坛徽章:
0
10 [报告]
发表于 2011-11-10 19:33 |只看该作者
他以为他是文艺程序员,结果成了2B程序员
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP