首页 新闻 会员 周边

嵌入式C语言以面向对象的思维编程,我该如何学习?

0
[待解决问题]

因公司项目代码有用到C语言模拟面向对象的思维和编码方式。因此我对此发出询问如何学习相关知识点,通过其他交流群和平台询问,得到的结果如下。

  1. 自己去网上看看 OOC/OOPC 的内容。因此发现 B 站上的 UP “攻城狮zhuzhu” 也做了相关视频。

  2. 书籍推荐:《UML+OOPC 嵌入式 C 语言开发精讲》

  3. LVGL、CPython、freeRTOS、RTthread源码

请问还有什么补充吗?比如学习方法,更好的学习资料,学习建议。

omnitrix_t的主页 omnitrix_t | 菜鸟二级 | 园豆:202
提问于:2026-03-22 15:21
< >
分享
所有回答(1)
0

在动手写代码前,最重要的是理解如何在C语言中模拟面向对象的三大特性。

loveme2 | 园豆:58 (初学一级) | 2026-03-23 09:57

我知道的,封装、多态和继承。

在 C 语言中,封装一般用结构体来封装数据成员,用公共函数来操作数据成员,用函数指针来实现接口或者说模拟 C++ 中的虚函数。

C 语言是没有办法实现继承的,因此只能通过结构体组合和结构体嵌套的方式进行。

那么多态呢?就要理解一下结构体嵌套的地址偏移了。比如下面这个。

#include <stdio.h>
#include <string.h>

typedef struct
{
  int age;
  char name[20];
  void (*print)(void *self);
}Animal;

typedef struct
{
  Animal base;
  int color;
}Dog;

void Dog_print(void *self)
{
  Dog * dog_ptr = (Dog *)self;
  printf("age = %d, name = %s, color = %d", dog_ptr->base.age, dog_ptr->base.name, dog_ptr->color);
}

void print(Animal * animal_ptr)
{
  animal_ptr->print(animal_ptr);
}

int main()
{
  Dog dog;
  dog.base.age = 10;
  strcpy(dog.base.name, "hei");
  dog.base.print = Dog_print;
  dog.color = 7;

  print((Animal *)&dog);
}
支持(0) 反对(0) omnitrix_t | 园豆:202 (菜鸟二级) | 2026-03-24 23:11

@omnitrix_t: 基于你已有的代码基础,可以尝试做一个稍完整的项目来巩固

支持(0) 反对(0) loveme2 | 园豆:58 (初学一级) | 2026-03-25 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册