C语言也能向对.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

mv2323 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档