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

前言

  1. 个人邮箱:[email protected]
  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;
}
相关推荐
王磊鑫10 分钟前
重返JAVA之路——图书管理系统
java·开发语言
xx155802862xx16 分钟前
matlab中进行海浪模型仿真
开发语言·matlab
2401_8582861137 分钟前
CD27.【C++ Dev】类和对象(18)友元和内部类
开发语言·c++·类和对象
(王子变青蛙)39 分钟前
C++初始
开发语言·c++·程序人生
极客先躯43 分钟前
高级java每日一道面试题-2025年4月06日-微服务篇[Nacos篇]-如何诊断和解决Nacos中的常见问题?
java·开发语言·微服务
格里姆肖1 小时前
LVGL源码(7):渲染
c语言·stm32·单片机
code菜只因1 小时前
初始C语言(2)
c语言
胎粉仔1 小时前
Swift —— delegate 设计模式
开发语言·设计模式·swift
ᖰ・◡・ᖳ1 小时前
Web APIs阶段
开发语言·前端·javascript·学习
双叶8361 小时前
(51单片机)LCD显示日期时间时钟(DS1302时钟模块教学)(LCD1602教程)
c语言·开发语言·数据库·单片机·嵌入式硬件·mongodb·51单片机