想用C来实现OOP,关键在于结构体。struct和OOP中的class最大区别为默认的继承访问权限:struct是public的,大家都能看到,class是private的,只有指定的对象看得到。
码农翻身里面有一篇文章讲到过用c语言来实现OOP,今天参照着它撸了一下oop的三大概念:封装、继承、多态。
1 封装:意思就是把信息隐藏起来。
举个例子,先创建一个shape结构体,然后实现create和init等方法,之后将源代码封装成库。这样一来,外部程序只能看见头文件的接口原型,而看不到其内部结构。
shape.h
//声明结构体
struct Shape;
//api原型
struct Shape *Shape_create(int x,int y);
void Shape_init(struct Shape *self, int x,int y);
void Shape_move(struct Shape *self, int x,int y);
float Shape_area(struct Shape *self);
...
shape.c
struct Shape{
int x;
int y;
};
struct Shape *Shape_create(int x, int y){
struct Shape *s = malloc(sizeof(struct Shape));
s->x= x;
s->y= y;
return s;
}
void Sh