关于C面向对象编程的研究。
前段时间在知乎上看到一篇文章,一个大佬说面向对象是一种思想,用C也可以写出很好的面向对象的程序。
文章链接: https://www.zhihu.com/question/30567850/answer/2602179225
于是让我产生了一点好奇,所以就研究了一下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
| #include <stdio.h> #include <stdlib.h> #include <string.h>
typedef struct Person { char name[50]; int age;
void (*setName)(struct Person*, const char*); void (*setAge)(struct Person*, int); void (*display)(const struct Person*); } Person;
void setName(Person* p, const char* name) { strncpy(p->name, name, sizeof(p->name) - 1); p->name[sizeof(p->name) - 1] = '\0'; }
void setAge(Person* p, int age) { p->age = age; }
void display(const Person* p) { printf("Name: %s\n", p->name); printf("Age: %d\n", p->age); }
Person* createPerson(const char* name, int age) { Person* p = (Person*)malloc(sizeof(Person)); if (p != NULL) { p->setName = setName; p->setAge = setAge; p->display = display; p->setName(p, name); p->setAge(p, age); } return p; }
void destroyPerson(Person* p) { free(p); }
int main() { Person* person = createPerson("Alice", 30); person->display(person);
person->setName(person, "Bob"); person->setAge(person, 25); person->display(person);
destroyPerson(person); return 0; }
|