c语言也能面向对象

c语言也能面向对象

ID:11426901

大小:145.00 KB

页数:23页

时间:2018-07-11

c语言也能面向对象_第1页
c语言也能面向对象_第2页
c语言也能面向对象_第3页
c语言也能面向对象_第4页
c语言也能面向对象_第5页
资源描述:

《c语言也能面向对象》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言也能面向对象(一)——一个简单的类面向对象不是C++,java,C#等的专利,万能的C语言一样可以面向对象编程。GObject系统已经用C语言实现了一套完整并且功能强大的面向对象系统。但GObject系统十分庞大,并依赖于众多的开发包,在项目本身很小,或者不想依赖于众多于GObject相关的开发包时,就无法使用了。那么能不能用C语言实现一套小巧简单,易于理解,易于使用的面向对象系统呢?就让我们一起探索一下吧!所谓类就是数据和方法的集合体。我们使用结构体定义类的数据,如下:1:structanimal2:{3:charname[256];4:intweight;5:}

2、;我们定义了一个animal结构体,成员包括animal的name和animal的weight(重量)。现在数据已经有了,那么方法如何定义呢?我们知道在面向对象中有封装的概念,所以结构体中的成员我们不应该直接访问,而应该通过方法访问,我们添加访问结构体成员变量的方法:1:char*animal_get_name(animal*self);2:voidanimal_set_name(animal*self,char*name);3:intanimal_get_weight(animal*self);4:voidanimal_set_weight(animal*self,in

3、tweight);5:char*animal_get_name(animal*self)6:{7:returnself->name;8:}9:10:voidanimal_set_name(animal*self,char*name)11:{12:strncpy(self->name,name,sizeof(self->name));13:}14:15:intanimal_get_weight(animal*self)16:{17:returnself->weight;18:}19:20:voidanimal_set_weight(animal*self,intweight

4、)21:{22:self->weight=weight;23:}24:方法的第一个参数animal*self是对象的地址,与C++中的this指针是同一个概念,只不过C++中的this指针是由编译器帮我们传递的,无需在代码中显式的写出来。现在类的数据、方法都有了,那么如何使用类创建、初始化、析构、销毁对象呢?在C++中有new、delete操作符负责创建和销毁,由构造函数和析构函数负责初始化和析构。这些在我们的C语言面向对象系统中都是要实现的,但对于我们的第一个类,我们可以实现的简单一些,如下:1:animal*animal_create(void);2:voidanim

5、al_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:returnself;11:}12:13:voidanimal_destroy(animal*self)14:{15:free(self);16:}17:animal_create负责对象创建和初始化,animal_dest

6、roy负责对象析构和销毁。到这里我们第一个类的定义就结束了。测试一下吧: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:printf("animal1,name:%s,weight:%d",8:animal_get_name(animal1),9:animal_get_weight(animal1));10:animal_destroy(

7、animal1);11:12:animal2=animal_create();13:animal_set_name(animal2,"Bib");14:animal_set_weight(animal2,10);15:printf("animal2,name:%s,weight:%d",16:animal_get_name(animal2),17:animal_get_weight(animal2));18:animal_destroy(animal2);19:看看测试代码,是不是有些感觉了,其实这里面向对象还远着呢,勉强

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。