c语言面向对象,C语言也能面向对象(一)——一个简单的类

Technorati 标签: c, c语言, 面向对象, oo, object-oriented
本文版权所有,转载请注明出处和作者联系方式。
作者:wormsun
联系方式: wormsun at gmail.com
博客:http://blog.csdn.net/wormsun
面向对象不是C++, java, C#等的专利,万能的C语言一样可以面向对象编程。GObject系统已经实现了一套完整并且功能强大的面向对象系统。GObject系统十分庞大,依赖于众多的开发包,有时不适合用到项目中,比如项目本身很小时,使用GObject极大增加了项目的复杂度,又比如不想依赖于众多于GObject相关的开发包时。
那么能不能用C语言实现一套小巧简单,易于理解,易于使用的面向对象系统呢?就让我们一起探索一下吧!
C语言中与类最相似的是结构体,我们使用结构体定义类的成员变量,如下:
struct animal { char name[256]; int weight; };
我们定义了一个animal结构体,成员包括animal的name和animal的weight(重量)。
所谓类就是数据和方法的集合体,现在数据已经有了,那么方法如何定义呢?
我们知道在面向对象中有封装的概念,所以结构体中的成员我们不应该直接访问,而应该通过方法访问,我们添加访问结构体成员变量的方法:
char* animal_get_name(animal* self);
void animal_set_name(animal* self, char* name);
int animal_get_weight(animal* self);
void animal_set_weight(animal* self, int weight);
方法的第一个参数animal* self是对象的地址,与C++中的this指针是同一个概念,只不过C++中的this指针是由编译器帮我们传递的,所以我们不许要在代码中显式的写出来。
现在类的数据、方法都有了,那么如何创建、初始化、析构、销毁类呢?
在C++中有new、delete操作符负责创建和销毁,由构造函数和析构函数负责初始化和析构。这些在我们的C语言面向对象系统中都是要实现的,但对于我们的第一个类我们可以简单一些实现,如下:
animal* animal_create(void);
void animal_destroy(animal* self);
animal_create负责对象创建和初始化,animal_destroy负责对象析构和销毁。
到这里我们第一个类的定义就结束了。测试一下吧:
animal* animal1 = NULL;
animal* animal2 = NULL;
animal1 = animal_create();
animal_set_name(animal1, "Kitty");
animal_set_weight(animal1, 30);
printf("animal1, name : %s, weight : %d\n",
animal_get_name(animal1),
animal_get_weight(animal1));
animal_destroy(animal1);
animal2 = animal_create();
animal_set_name(animal2, "Bib");
animal_set_weight(animal2, 10);
printf("animal2, name : %s, weight : %d\n",
animal_get_name(animal2),
animal_get_weight(animal2));
animal_destroy(animal2);
看看测试代码,是不是有些感觉了,其实这里面向对象还远着呢,勉强能称得上是基于对象吧。
下一篇我们将介绍如何通过new和delete操作创建和销毁对象,通过构造函数和析构函数初始化和析构对象。
Tags:  简单的c语言程序 c语言是面向 c语言面向 c语言对象 c语言面向对象

延伸阅读

最新评论

发表评论