用 C 语言理解封装、继承、多态

前言

  1. 个人邮箱:zhangyixu02@gmail.com
  2. 本文主要是给一些做嵌入式软件开发,并且非计科的朋友做科普。使用 C 语言理解封装、继承、多态等概念。

正文

  1. 基类:最基础的结构体或函数。
  2. 派生类:基类的继承+自己的特性。
  3. 封装:将数据和操作数据的函数结合在一起,隐藏内部实现细节,仅对外提供接口,提高了代码的安全性和可维护性。例如 Animal 结构体中,有数据 name ,还有 speak 操作方法。
  4. 继承:Dog 结构体可以包含 Animal 结构体的成员,从此拥有 namespeak 这两个成员变量。
  5. 多态:通过函数指针实现,给函数指针赋不同的值,用户调用相同的方法 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;
}
相关推荐
2601_966949651 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin1 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
滕州市燕猫虎计算机科技工作室个体工商户1 小时前
Java锁
java·开发语言
派葛穆1 小时前
Lerobot -飞特舵机ST-3215双舵机联动(ESP_NOW)
c语言
多加点辣也没关系2 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2332 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21032 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客2 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
新时代牛马4 小时前
cyclictest 毛刺从哪来?从ftrace、latencytop、perf到IRQ/调度延迟定位
android·开发语言·python·kotlin
三8444 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker