综合编程

学习笔记—-C语言的面向对象

微信扫一扫,分享到朋友圈

学习笔记—-C语言的面向对象

2020-03-26    21:27:17

面向对象的编程语言都有一个类的概念,像Java、python等。类是对特定数据的特定操作的集合体。它包含两个范畴:数据和操作。C语言是没有类的概念的,但是可以用函数指针将struct模拟为一个包含数据和操作的“类”。

基本模式:

下面针对四个菜单设计:

1 #define C_Class
2
3 C_Class A
4 {
5         C_Class A  *A_this;                            //this指针
6
7
8           void(*foo)(C_Class A  *A_this);              //行为:函数指针
9           int (*parea)(int length, int width);
10
11           int a;                                       //数据
12           int b;
13 }
1 //传统做法:按下OK键
2 void onOkKey()
3 {
4     //判断在什么焦点菜单上按下OK键,调用相应的处理函数
5     Switch(currentFocus)
6     {
7         case MENU1;
8             menu1OnOk();
9             break;
10         case MENU2;
11             menu2OnOk();
12             break;
13          ```
14      }
15 }
1 //传统做法:按下Cancel键
2 void onCancelKey()
3 {
4     //判断在什么焦点菜单上按下Cancel键,调用相应的处理函数
5     Switch(currentFocus)
6     {
7         case MENU1;
8             menu1OnCancel();
9             break;
10         case MENU2;
11             menu2OnCancel();
12             break;
13         ```
14     }
15 }

上面两个是传统的设计方法,下面看一下封装成“类”的方法:

1 //将菜单的属性和操作“封装”在一起,声明菜单项的“类”
2 typedef struct tagSysMenu
3 {
4     char *text;               //菜单的文本
5     BYTE xPos;                //菜单在LCD上的X坐标
6     BYTE yPos;                //菜单在LCD上的y坐标
7     void (*onOkFun);          //在菜单上按下OK键的处理函数指针
8     void (*onCancelFun);      //在菜单上按下Cancel键的处理函数指针
9 }SysMenu, *LPSysMenu;
1 //用结构体数组来实现每一个菜单项
2 static SysMenu menu[MENU_NUM] =
3 {
4     {    "menu1" ,0.48, menu1OnOk, menuOnCancel  }
5     ,
6     {    "menu2" ,7.48, menu2OnOk, menuOnCancel  }
7     ,
8     {    "menu3" ,14.48, menu3OnOk, menuOnCancel  }
9     ,
10     {    "menu4" ,21.48, menu4OnOk, menuOnCancel  }
11     ```
12 }
1 //按下OK键
2 void onOkKey()
3 {
4     menu[currentFocusMenu].onOkFun();
5 }
6
7 //按下Cancel键
8 void onCancelKey()
9 {
10     menu[currentFocesMenu].onCancelFun();
11 }

如需增加菜单,只需增加menu5就可以了!!!是不是很简单很方便!!

笔记来自学堂在线:嵌入式软件设计–C的面向对象化

Why you need to start using Svelte Js for web development projects if you still don't

上一篇

《GTA6》要来了?Kotaku记者:短期内不会有消息

下一篇

你也可能喜欢

评论已经被关闭。

插入图片

热门栏目

学习笔记—-C语言的面向对象

长按储存图像,分享给朋友