- 2
- 0
- 约2.08万字
- 约 23页
- 2016-09-21 发布于重庆
- 举报
C语言也能面向对象
C语言也能面向对象(一)——一个简单的类
面向对象不是C++, java, C#等的专利,万能的C语言一样可以面向对象编程。GObject系统已经用C语言实现了一套完整并且功能强大的面向对象系统。但GObject系统十分庞大,并依赖于众多的开发包,在项目本身很小,或者不想依赖于众多于GObject相关的开发包时,就无法使用了。 那么能不能用C语言实现一套小巧简单,易于理解,易于使用的面向对象系统呢?就让我们一起探索一下吧! 所谓类就是数据和方法的集合体。我们使用结构体定义类的数据,如下:
1: struct animal
2: {
3: char name[256];
4: int weight;
5: };
我们定义了一个animal结构体,成员包括animal的name和animal的weight(重量)。 现在数据已经有了,那么方法如何定义呢? 我们知道在面向对象中有封装的概念,所以结构体中的成员我们不应该直接访问,而应该通过方法访问,我们添加访问结构体成员变量的方法:
1: char* animal_get_name(animal* self);
2: void animal_set_name(animal* self, char* name);
3: int animal_get_weight(animal* self);
4: void animal_set_weight(animal* self, int weight);
5: char* animal_get_name(animal* self)
6: {
7: return self-name;
8: }
9:
10: void animal_set_name(animal* self, char* name)
11: {
12: strncpy(self-name, name, sizeof(self-name));
13: }
14:
15: int animal_get_weight(animal* self)
16: {
17: return self-weight;
18: }
19:
20: void animal_set_weight(animal* self, int weight)
21: {
22: self-weight = weight;
23: }
24:
方法的第一个参数animal* self是对象的地址,与C++中的this指针是同一个概念,只不过C++中的this指针是由编译器帮我们传递的,无需在代码中显式的写出来。 现在类的数据、方法都有了,那么如何使用类创建、初始化、析构、销毁对象呢? 在C++中有new、delete操作符负责创建和销毁,由构造函数和析构函数负责初始化和析构。这些在我们的C语言面向对象系统中都是要实现的,但对于我们的第一个类,我们可以实现的简单一些,如下:
1: animal* animal_create(void);
2: void animal_destroy(animal* self);
3:
4: animal* animal_create(void)
5: {
6: animal* self = malloc(sizeof(animal));
7: LW_ASSERT(self);
8: memset(self-name, 0x00, sizeof(self-name));
9: self-weight = 0;
10: return self;
11: }
12:
13: void animal_destroy(animal* self)
14: {
15: free(self);
16: }
17:
animal_create负责对象创建和初始化,animal_destroy负责对象析构和销毁。 到这里我们第一个类的定义就结束了。测试一下吧:
1: animal* animal1 = NULL;
2: animal* animal2 = NULL;
3:
4: animal1 = animal_create();
5: animal_set_name(animal1, Kitty);
6: animal_set_weight(animal1, 30);
7: print
您可能关注的文档
- 高压电动机轴承故障分析.doc
- 高尔夫击球技术教案2013.doc
- C级电磁屏蔽机柜.doc
- C练习三工资练习.doc
- 高层建筑金属幕墙铝合金门窗的防雷措施.doc
- C绘制曲线图和柱状图.docx
- C绘制渐变矩形代码.doc
- C组《寻宝记》讨论结果.doc
- 高效低阻力抗菌空气过滤器研制.doc
- 高效教研活动的设计与实施吴琼.docx
- 2026年及未来5年内中国液体氩气行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国黄铜合页行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国竹工艺家具行业投资前景及策略咨询研究报告.docx
- 2025年中国微机数显自动分析仪市场调查研究报告.docx
- 2026年及未来5年内中国微尘白色粉笔行业投资前景及策略咨询研究报告.docx
- 2025年中国微电脑型压胶机市场调查研究报告.docx
- 2026年及未来5年内中国数字化等功游泳训练测试系统行业投资前景及策略咨询研究报告.docx
- 2025年中国圆形花瓶市场调查研究报告.docx
- 2026年及未来5年内中国植物纤维静淀过滤器行业投资前景及策略咨询研究报告.docx
- 2025年中国超音波手套机市场调查研究报告.docx
最近下载
- 农村电商(农产品电商)运营全套教学课件.pptx
- 四川省成都市第七中学2025-2026学年高一上学期11月半期考试英语(含答案).pdf
- (最新)ISO31073-2022风险管理术语(译2022-04)(推荐下载).pdf VIP
- (最新)村干部考试试题(含答案).docx VIP
- zippo图册年度机系列整合(更新至C25).docx VIP
- 多轴车铣复合加工运动转换方法:原理、实践与创新.docx
- 商务礼仪商务礼仪培训专用.ppt VIP
- 《铁路劳动安全》第04章预防机动车辆伤害.pptx VIP
- 化工制图第1章 制图基础.ppt VIP
- 化工制图AutoCAD应用基础-03章.pptx VIP
原创力文档

文档评论(0)