我是c,我有struct就够了,为什么需要对象呢?一人我也可以饮酒醉
Java,Python,JavaScript,Ruby,...我并不羡慕他们
我时常骄傲的对自己说,我有指针,指针是程序员的灵魂,一只猴子如果不知道指针,不知道内存,不懂底层的基本原理,那就只能说是一只猴子
我知道,我处于低层,在系统级编程,操作系统,数据库,编译器,我是没有那些漂浮在应用层的那么光鲜亮丽,可我却依然在Unix里笑的冷艳漂亮!
可我不服气,我虽然不知道class是什么,但好在我有struct,我同样可以实现OOP(封装,继承,多态)
好了,我们看一下程序吧!
1 /*************************************************************************
2 > File Name: rectangle.h
3 > Created Time: 2019年02月18日 星期一 18时30分14秒
4 ************************************************************************/
5
6 #ifndef _RECTANGLE_H__
7 #define _RECTANGLE_H__
8 #include <unistd.h>
9
10 struct Rectangle;
11 struct Rectangle * Rectangle_Create(int x,int y);
12 void Rectangle_init(struct Rectangle *self,int x,int y);
13 void Rectangle_Modifysize(struct Rectangle *self,int dx,int dy);
14 void Rectangle_Display(struct Rectangle *self);
15 void Rectangle_Empty(struct Rectangle *self);
16
17
18 #endif
~
~
1 /*************************************************************************
2 > File Name: rectangle.c
3 > Created Time: 2019年02月18日 星期一 18时32分14秒
4 ************************************************************************/
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <assert.h>
9 struct Rectangle
10 {
11 int x;
12 int y;
13 };
14
15 struct Rectangle * Rectangle_Create(int x,int y)
16 {
17 struct Rectangle *p_Rectangle = malloc(sizeof(struct Rectangle));
18 p_Rectangle -> x = x;
19 p_Rectangle -> y = y;
20
21 return p_Rectangle;
22 }
23
24 void Rectangle_init(struct Rectangle *self,int x,int y)
25 {
26 assert(NULL != self);
27 self -> x = x;
28 self -> y = y;
29 }
30
31 void Rectangle_Modifysize(struct Rectangle *self,int dx,int dy)
32 {
33 assert(NULL != self);
34 self -> x += dx;
35 self -> y += dy;
36 }
37
38 void Rectangle_Display(struct Rectangle *self)
39 {
40 assert(NULL != self);
41 printf("(%d,%d)\n",self -> x,self -> y);
42 }
43
44 void Rectangle_Empty(struct Rectangle *self)
45 {
46 if(NULL != self)
47 {
48 free(self);
49 }
50 }
51
52
1 /*************************************************************************
2 > File Name: main.c
3 > Created Time: 2019年02月18日 星期一 18时33分52秒
4 ************************************************************************/
5
6 #include "rectangle.h"
7
8 int main(void)
9 {
10
11 struct Rectangle *p_test = Rectangle_Create(0,0);
12 Rectangle_init(p_test,10,15);
13 Rectangle_Display(p_test);
14 Rectangle_Modifysize(p_test,100,100);
15 Rectangle_Display(p_test);
16 Rectangle_Empty(p_test);
17 return 0;
18 }
19
20
Makefile
1 test:rectangle.o main.c
2 gcc rectangle.o main.c -o test #链接
3 rectangle.o:rectangle.s
4 gcc -c rectangle.s #汇编
5 rectangle.s:rectangle.i
6 gcc -S rectangle.i #编译
7 rectangle.i:rectangle.c
8 gcc -E rectangle.c -o rectangle.i #预处理
9 gcc -E rectangle.c
10
11 clean:
12 rm rectangle.i rectangle.o rectangle.s test -rf
13
14
~
运行结果: