C语言也能面向对象.docVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档