c++相比与c在类的定义上是一个巨大的进步,他的对象的概念让编程的理解大大简化
c语言中有一个与类十分相近的数据类型概念,叫做结构体。
c语言是一门面向过程的语言,但是实际的工程当中,大量的使用了结构体,即数据对象化,而实现就采用过程化
有很多时候,我们也非常期望能够在C中实现类,即把函数也封装进去,使程序更加容易理解
(有的人会问,反正c++支持C,何不就在C++中进行编程,还搞这么多事,事实上,在绝大多数的单片机和嵌入式编程中,是只能用C程序的。我们知道uC/OS,ulinux等等基于C的嵌入式操作系统,我们听说过基于c++并且广泛应用的嵌入式系统吗?)
这里我们就要先简单说一说函数,对于function(elem1, elem2, elem3),他其实和数组一样,a[10]的a代表了这个数组的起始地址,而function就是这个函数的起始地址
在struct中,不能放函数,那么我们转变一下,是否可以放函数的指针呢,答案是肯定的,这也是我们实现结构体中封装函数的原理
所以
struct class
{
int x;
int y;
int z;
int (*function)();
}c_class
这里要特别注意,如果不加括号,表示一个返回指针的函数,他还是一个函数,因此肯定是不对的
而加了括号,这表示是一个函数的指针,因此,加不加括号有非常大的区别
而且这只是一个函数的指针,因此可以完全不需要指明函数需要的参数
一个定义好的函数
int fun(int num1 , int num2 , int num3)
{
......
}
现在进行初始化
c_class new_class;
new_class.x = 5;
new_class.y = 20;
new_class.z = 2;
new_class.function = fun;
至此C语言下的类的定义和初始化全部完毕
现在只需要调用
int fun_return = new_class.function(new_class.x , new_class.y , new_class.z);
最后再次说明,在我们实际的学习过程中,这种方法基本没什么用
我们的编程一般是VC或VS,都是支持C和c++的,不需要太在意
而当真正的在工作中,必须严格的使用纯C语言的时候,而您又觉得使用类可能会简化问题时,这种方法将会极大的帮助您