- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言也能面向对象(一)——一个简单的类
面向对象不是C++, java, C#等的专利,万能的C语言一样可以面向对象编程。 HYPERLINK /gobject/stable/ \t _blank 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: anim
您可能关注的文档
最近下载
- 2025年最新劳动合同法全文.docx VIP
- 养老服务机构服务质量星级评定检查细则一.doc VIP
- 中国心血管健康与疾病报告.pdf VIP
- 《中国天然气发展报告(2016)》.docx VIP
- (高清版)B-T 24353-2022 风险管理 指南.pdf VIP
- GB∕T 24353-2022 《风险管理 指南》解读和应用指导材料(雷泽佳编写2024B0).pdf VIP
- 2025年版检验检测机构资质认定评审准则考试试题及答案.pdf VIP
- 前交通动脉瘤破裂伴蛛网膜下腔出血个案护理.pptx VIP
- 临床颅内动脉瘤破裂伴蛛网膜下腔出血的个案护理.pptx VIP
- 检验检测机构资质认定评审准则试题及答案.pdf VIP
文档评论(0)