前言
- 个人邮箱:[email protected]
- 本文主要是给一些做嵌入式软件开发,并且非计科的朋友做科普。使用 C 语言理解封装、继承、多态等概念。
正文
- 基类:最基础的结构体或函数。
- 派生类:基类的继承+自己的特性。
- 封装:将数据和操作数据的函数结合在一起,隐藏内部实现细节,仅对外提供接口,提高了代码的安全性和可维护性。例如
Animal
结构体中,有数据name
,还有speak
操作方法。 - 继承:
Dog
结构体可以包含Animal
结构体的成员,从此拥有name
和speak
这两个成员变量。 - 多态:通过函数指针实现,给函数指针赋不同的值,用户调用相同的方法
myDog->base.speak();
能够产生不一样的效果。
c
#include <stdio.h>
#include <stdlib.h>
// 基类,将数据和操作方法结合起来,这个叫做封装
typedef struct {
int name;
void (*speak)(void); // 函数指针用于多态,我们给这个函数指针赋值,可以指向多个类型数据
} Animal;
// 基类方法
void animal_speak(void)
{
printf("Animal sound\n");
}
// 派生类
typedef struct
{
Animal base; // 继承自 Animal
int age; // 自己的特性
} Dog;
// 派生类方法
void dog_speak(void)
{
printf("Woof!\n");
}
// 创建 Dog 对象
Dog* create_dog()
{
Dog* dog = (Dog*)malloc(sizeof(Dog));
dog->base.speak = dog_speak; // 设置多态行为
return dog;
}
// 销毁 Dog 对象
void destroy_dog(Dog* dog) {
free(dog);
}
int main() {
// 创建一个 Dog 对象
Dog* myDog = create_dog();
// 调用多态方法
myDog->base.speak();
// 销毁 Dog 对象
destroy_dog(myDog);
return 0;
}