C语言面向对象编程(定义、函数指针、指针函数)

来源:互联网 发布:说明书排版设计软件 编辑:程序博客网 时间:2024/05/21 09:46

所谓面向对象编程,就是把一切万物看着对象(即一切皆对象),此对象具有一定的属性和方法。对象怎么理解呢?好比如我们人,人有名字、有性别、有年龄等等一些本身具有的属性,还有人能跑、能吃饭、能睡觉等等一些本事(当然,首先要是个正常人)。而这些人本身具有的属性就是人这个对象的属性,人拥有的本事就是人这个对象的方法,即对象中的方法就是能去操作某些事物。在面向对象编程语言C++和Java中用类(class)来形容一个对象,虽然面向过程编程语言C中没有类(class),但是C语言中有结构体(struct)。

对象定义

C++或Java中定义人(person)对象


C中定义人(person)对象


只需要将这些函数指针指向特定的函数,则这个对象具有了方法。接下来,我们来两个概念:函数指针和指针函数

函数指针——首先是指针,指向函数的指针。必须用对应的函数赋值给它,才能被调用

一般的函数指针可以这么定义:

int (*func)(int, int);

表示一个可以指向含有两个int参数并且返回值是int类型的任何一个函数的指针。假如存在这样一个函数:

int add(int a, int b)

{

return (a+b);

}

那么在实际使用函数指针func时可以这样实现:

func=&add;//指针赋值,或者直接func=add;  因为函数本身就是一个地址

测试:


测试结果如下:


事实上,为了代码的移植考虑,一般使用typedef定义函数指针类型:

typedef int (*FUNC)(int , int);

FUNC func = &add;//调用func函数时,跟上面一样,func(5,6);

指针函数——首先是函数,一个返回类型为指针的函数,可以被直接调用的函数

一般的指针函数可以这么定义

int *add(int a, int b);//而我们函数指针定义是:int (*func)(int,int);可以不用写参数名,但必须指定参数类型及个数

无需为函数赋值,可以直接调用,只不过此时返回不是int类型数值,而是指向一个int类型的指针。测试代码如下:


测试结果:


对于面向对象中的封装等特性,下次再来测试。先对封装开个头,所谓封装,通俗地讲,就是我们人学会了包装自己,提供给别人是大家都可以看到的外观以及选择性让别人知道的一些事情,还有一些选择性帮助别人的能力。大家都能看到的外观以及选择让所有人都能知道的一些事情属于公共的,面向对象语言用public关键字修饰;选择让部分人(家人、朋友、同学、同事等)知道的事情以及提供给部分人的帮助属于保护的,面向对象语言用protect关键字修饰;有些事情以及一些能力谁也不能知道或得到(只有自己知道)属于私有的(隐藏),面向对象语言用private关键字修饰。总结:封装一个对象提供其他对象的一些属性值和一些接口,具体怎么实现程序员不知道。在面向对象C++或Java语言中有protect、private关键字在语言层面上支持,而C语言中没有这些。C语言有结构体(struct),其实也可以实现封装。





















0 0