[开发工具] 面向对象的电灯程序

[复制链接]
 楼主| LOVEEVER 发表于 2024-9-13 14:49 | 显示全部楼层 |阅读模式
面向对象,是编程界的一个概念。什么叫面向对象呢?编程有两种要素:程序(方法),数据(属性)。例如:一个LED,我们可以点亮或者熄灭它,这叫方法。LED什么状态?亮还是灭?这就是属性。我们通常这样编程:

  1. u8 ledsta = 0;
  2. void ledset(u8 sta)
  3. {
  4. }

这样的编程有一个问题,假如我们有10个这样的LED,怎么写?这时我们可以引入面向对象编程,将每一个LED封装为一个对象。可以这样做:

  1. /*
  2. 定义一个结构体,将LED这个对象的属性跟方法封装。
  3. 这个结构体就是一个对象。
  4. 但是这个不是一个真实的存在,而是一个对象的抽象。
  5. */
  6. typedef struct{
  7.     u8 sta;
  8.     void (*setsta)(u8 sta);
  9. }LedObj;

  10. /*  声明一个LED对象,名称叫做LED1,并且实现它的方法drv_led1_setsta*/
  11. void drv_led1_setsta(u8 sta)
  12. {
  13. }

  14. LedObj LED1={
  15.         .sta = 0,
  16.         .setsta = drv_led1_setsta,
  17.     };

  18. /*  声明一个LED对象,名称叫做LED2,并且实现它的方法drv_led2_setsta*/
  19. void drv_led2_setsta(u8 sta)
  20. {
  21. }

  22. LedObj LED2={
  23.         .sta = 0,
  24.         .setsta = drv_led2_setsta,
  25.     };

  26. /*  操作LED的函数,参数指定哪个led*/
  27. void ledset(LedObj *led, u8 sta)
  28. {
  29.     led->setsta(sta);
  30. }

是的,在C语言中,实现面向对象的手段就是结构体的使用。

sj8zw8 发表于 2024-9-17 13:01 来自手机 | 显示全部楼层
我们可以点亮或者熄灭它,这叫方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

342

主题

2619

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部