C语言对面向对象思想的实现
文章作者:cdeng
一个对象是既有属性又有行为的,有整体的行为也有各个属性的行为。把属性的行为也封装起来就不需要直接去操作属性了,试想一下如果不允许对属性直接操作,那么这个属性就成了其他高级语言中的private类型了。这些对属性进行操作的函数就相当于这个对象提供给外部的一个接口,这样封装的话会更加彻底,独立,我们把对象封装起来,可以让外部修改的属性就向外部提供相关的函数,不想让外部修改的属性就不提供这样的接口,然后我们在使用的时候也只用提供的函数来修改对象的属性,这样就达到对事物封装的目的,外部是不知道我们封装的事物所具备的属性的。整个封装是通过结构体实现的,对行为的封装是通过函数指针实现的,这个结构体就是一个完整的对象,其它一些高级语言把对象封装在类里,我们用结构体也完成了这种封装,所以用C语言是包含面向对象的思想的,也是可以进行面向对象的设计,写出面向对象的程序。
研究代码如下:
#define new(x) ((x *)malloc(sizeof(x)))
ch * a = new(ch);
可以知道new()返回的值是一个ch型的指针,a是一个指向ch型结构体的指针,看下面的代码可以发现确实是把a指向的空间当做ch型结构体处理的。说明new返回的指针指向的是一个结构体大小的空间,那么这个宏定义的功能就是开辟一个结构体大小的空间,并且一个指向该空间的ch型指针。所以具体实现就是用malloc开辟一个结构体大小的空间,然后把返回值强制转化为ch型指针。Java等其它一些高级语言中是有系统提供的new(x)的,作用是生成一个x型的对象,从我们这次完成的宏定义我们可以想到大概知道new的实现。
研究事物要研究其本质,以前总听说C语言是面向结构设计的语言,现在研究了这章发现其实不是这样的,虽然C语言有结构化的控制语句,但是它也有面向对象的结构,它是什么样的语言,是取决于使用者怎么用的。其它面向对象的语言,只不过是把C中面向对象的封装加了一些限制和小功能,可以把对象的属性定义成private和protect类型来加以保护,函数的实现可以写在类中,而C中属性全部是可以自由访问的,需要使用者自己限制自己不去直接访问,只通过设计的函数接口来访问属性,这个接口是通过函数指针实现的,函数中是可以直接访问属性的。我很喜欢C语言的这种自由度,这种自由度给了我们很大的发挥空间,只要我们明白本质,抓住本质来使用,完全可以给自己设计一些权限来达到不同的效果,像其它语言的类是限制死的,属性需要设置不同的权限,而C中所有的属性定义都是一样的,这些属性的访问权限就完全掌握在我们自己手中,很爽的感觉。自己掌握这些,而不是靠开发环境来限制,真的很爽。
发表日期:12/07/18 00:00
网友评论(0)
当前1/1页 首页 上一页下一页 尾页