-
Notifications
You must be signed in to change notification settings - Fork 0
/
c_class.c
131 lines (113 loc) · 3.27 KB
/
c_class.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/************************************************************************
* FilePath : c_class.c
* Author : GX.Duan
* Date : 2022-09-11 17:37:06
* LastEditTime : 2022-09-11 17:37:32
* LastEditors : ShallowGreen123 [email protected]
* Copyright (c): 2022 by GX.Duan, All Rights Reserved.
* Github : https://github.com/ShallowGreen123/lvgl_mydemo
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
/************************ 封装 ***********************************/
// typedef struct shape {
// int x;
// int y;
// } SHAPE;
// struct shape *shape_create(int x, int y) {
// struct shape *s = (SHAPE *)malloc(sizeof(SHAPE));
// s->x = x;
// s->y = y;
// return s;
// }
// void shape_init(SHAPE *s, int x, int y) {
// s->x = x;
// s->y = y;
// }
// void shape_move(SHAPE *s, int x, int y) {
// s->x = x;
// s->y = y;
// }
/************************** 继承 *********************************/
// typedef struct rectangle {
// struct shape base;
// int witch;
// int hight;
// } RECTANGE;
// struct rectangle *rectangle_create(int x, int y, int w, int h) {
// struct rectangle *r = (RECTANGE *)malloc(sizeof(RECTANGE));
// shape_init((struct shape *)r, x, y);
// r->witch = w;
// r->hight = h;
// return r;
// }
/************************** 多态 *********************************/
typedef struct NewShape {
struct ShapeVtbl {
void (*postion)(struct NewShape *self);
void (*size)(struct NewShape *self);
};
int x;
int y;
} NEW_SHAPE;
typedef struct rectangle {
struct NewShape base;
int witch;
int hight;
} RECTANGE;
void co_postion(NEW_SHAPE *self) {
self->postion(self);
}
void co_size(NEW_SHAPE *self) {
self->size(self);
}
// shape
void shape_pos(NEW_SHAPE *s) {
printf("shape_pos\n");
}
void shape_size(NEW_SHAPE *s) {
printf("shape_size\n");
}
struct NewShape *shape_create(int x, int y) {
struct NewShape *s = (NEW_SHAPE *)malloc(sizeof(NEW_SHAPE));
s->postion = shape_pos;
s->size = shape_size;
s->x = x;
s->y = y;
return s;
}
void shape_init(NEW_SHAPE *s, int x, int y) {
s->x = x;
s->y = y;
}
// rectangle
void rectangle_pos(NEW_SHAPE *s) {
printf("rectangle_pos\n");
}
void rectangle_size(NEW_SHAPE *s) {
printf("rectangle_size\n");
}
struct rectangle *rectangle_create(int x, int y, int w, int h) {
struct rectangle *r = (RECTANGE *)malloc(sizeof(RECTANGE));
shape_init((NEW_SHAPE *)r, x, y);
r->base.postion = rectangle_pos;
r->base.size = rectangle_size;
r->witch = w;
r->hight = h;
return r;
}
int main() {
struct NewShape *s = shape_create(10, 10);
co_postion(s);
co_size(s);
struct rectangle *r = rectangle_create(11, 11, 12, 12);
co_postion(&r->base);
co_size(&r->base);
// SHAPE *shape = shape_create(10, 10);
// shape_move(shape, 20, 20);
// printf("x=%d \t y=%d\n", shape->x, shape->y);
// RECTANGE *r = rectangle_create(10, 10, 11, 11);
// shape_move((SHAPE *)r, 20, 20);
// printf("x=%d \t y=%d\n", r->base.x, r->base.y);
// return 0;
}