学习笔记----C语言的面向对象
2020-03-26 21:27:17
面向对象的编程语言都有一个类的概念,像Java、python等。类是对特定数据的特定操作的集合体。它包含两个范畴:数据和操作。C语言是没有类的概念的,但是可以用函数指针将struct模拟为一个包含数据和操作的“类”。
基本模式:
下面针对四个菜单设计:
#define C_Class C_Class A
{
C_Class A *A_this; //this指针 void(*foo)(C_Class A *A_this); //行为:函数指针
int (*parea)(int length, int width); int a; //数据
int b;
}
//传统做法:按下OK键
void onOkKey()
{
//判断在什么焦点菜单上按下OK键,调用相应的处理函数
Switch(currentFocus)
{
case MENU1;
menu1OnOk();
break;
case MENU2;
menu2OnOk();
break;
```
}
}
//传统做法:按下Cancel键
void onCancelKey()
{
//判断在什么焦点菜单上按下Cancel键,调用相应的处理函数
Switch(currentFocus)
{
case MENU1;
menu1OnCancel();
break;
case MENU2;
menu2OnCancel();
break;
```
}
}
上面两个是传统的设计方法,下面看一下封装成“类”的方法:
//将菜单的属性和操作“封装”在一起,声明菜单项的“类”
typedef struct tagSysMenu
{
char *text; //菜单的文本
BYTE xPos; //菜单在LCD上的X坐标
BYTE yPos; //菜单在LCD上的y坐标
void (*onOkFun); //在菜单上按下OK键的处理函数指针
void (*onCancelFun); //在菜单上按下Cancel键的处理函数指针
}SysMenu, *LPSysMenu;
//用结构体数组来实现每一个菜单项
static SysMenu menu[MENU_NUM] =
{
{ "menu1" ,0.48, menu1OnOk, menuOnCancel }
,
{ "menu2" ,7.48, menu2OnOk, menuOnCancel }
,
{ "menu3" ,14.48, menu3OnOk, menuOnCancel }
,
{ "menu4" ,21.48, menu4OnOk, menuOnCancel }
```
}
//按下OK键
void onOkKey()
{
menu[currentFocusMenu].onOkFun();
} //按下Cancel键
void onCancelKey()
{
menu[currentFocesMenu].onCancelFun();
}
如需增加菜单,只需增加menu5就可以了!!!是不是很简单很方便!!
笔记来自学堂在线:嵌入式软件设计--C的面向对象化
学习笔记----C语言的面向对象的更多相关文章
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- [java学习笔记]java语言核心----面向对象之构造函数
1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用: 给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...
- [java学习笔记]java语言核心----面向对象基础
1.面向对象概述 面向对象是java语言的核心.是对应于面向过程而言的. 面向过程:强调的是过程,即动作.在java中动作就是函数.C语言就是面向过程的. 如:把大象装进冰箱需要几步? 答:需要三步: ...
- [java学习笔记]java语言核心----面向对象之static关键字
static关键字用处 用于修饰成员变量和成员函数 被修饰后的成员具有以下特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 使用注意 静态方法只能访问静态成员:非静态方 ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- JavaSE学习笔记(3)---面向对象三大特性
JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...
- JavaSE学习笔记(2)---面向对象基础
JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
随机推荐
- Apollo核心概念之“Namespace”
转载于https://github.com/ctripcorp/apollo,by Ctrip, Inc. Apollo核心概念之“Namespace” 1. 什么是Namespace? Namesp ...
- ServletContext+ServletConfig内容
ServletConfig { ① //读取web.xml配置信息 ServletConfig config = this.getServletConfig(); //读取类名称 config.get ...
- 一分钟搞定pychram远程调试和同步代码
首先说一下需求,否则很多人都不知道pycharm这个远程同步和调试到底是干嘛使的. 需求很简单,我想要在本地的windows机器上跑一个程序,但是程序运行会加载一些很占内存的树型数据结构,称其为tre ...
- java使用jackson生成和解析JSON
java使用jackson生成和解析JSON 1.导包 2.生成json和解析json package test; import com.fasterxml.jackson.core.JsonProc ...
- 【转载】解决StackOverFlow不能登录的问题
解决StackOverFlow不能登录的问题 原创 2017年04月08日 13:32:21 标签: stack overflow / firefox / 浏览器 今天想着使用谷歌浏览器登录sta ...
- Python---7函数(调用&定义函数)
函数 Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs(),只有一个参数.可以直接从Python的官方网站查看文档: http: ...
- OSX安装Mysql8.0
OSX下MySQL的安装非常方便,可以通过官网的dmg包进行安装,也可通过brew进行安装.以下介绍如何通过brew如何安装MySQL. 0X00.安装前的准备 既然要通过brew安装,那么就需要确保 ...
- 关于struct stat
需要使用struct stat 类型时如果编译不过,修改Makefile: ##CFG_INC := -I$(MPI_DIR)/api/so/##CFG_INC += -I$(BASE_DIR)/pu ...
- shell 函数(特定的函数和脚本内传参)
和其他脚本语言一样,bash同样支持函数.我们可创建特定的函数,也可以创建能够接受参数的函数.需要的时候直接调用就可以了. 1.定义函数 function fname() { statements; ...
- 前端每日实战:147# 视频演示如何用纯 CSS 创作透视按钮的悬停特效
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/qJEdKb 可交互视频 此视频是可 ...