学习笔记----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函数 ------------------------- ----------------------------- ...
随机推荐
- nginx安装与fastdfs配置--阿里云
上一篇文章:fastDFS 一二事 - 简易服务器搭建之--阿里云 做了fastDFS的服务安装和配置,接下来我们来看nginx的安装 第一步:安装nginx需要安装的一些环境: 1.例如: yum ...
- file / from install of XXX conflicts with file from package filesystem-XXX
在centos上安装一个偏门软件时出现如下问题: rpm -ivh mNetAssist-0.1.1-2.x86_64.rpm #执行命令 file / from install of XXX con ...
- 奇葩念头:微信能取代WP应用吗
墙倒众人推,原本是再平常不过的事,但每次发生都显得特别凄凉--就和楼市买房买涨不买跌一样,在互联网行业,用户数量越多的产品或服务,就会越受到行业和大众青睐.而越是小众的产品或服务,虽然是要走 ...
- rpm报错warning: /var/tmp/rpm-tmp.1OZa8q: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY的解决
参考链接:http://blog.51cto.com/zymin0823/1546537 报错: 解决:使用如下两个选项
- Redis: userd_memory使用超出maxmemory
Redis:userd_memory使用超出maxmemory 一.问题现象 2018.12.30 19:26分,收到Redis实例内存使用告警“内存使用率299%>=80%”,检查实例info ...
- Nginx_安装
1. 安装步骤 上传nginx上传nginx安装包到linux 安装gcc 1 yum -y install gcc-c++ gcc 查看是否安装gcc: 1 gcc -v 安装依赖库 1 yum - ...
- 我为什么要用CSDN博客?
在今年的二月份,因老师说由于学习需要,我怀着抵触的情绪开通了之前闻所未闻的CSDN博客. 三月六号我发了第一篇原创文章,说实话感觉没什么意思,只是在完成老师留给的任务.接下来的几周一直按着老师的要求不 ...
- linux入门系列16--文件共享之Samba和NFS
前一篇文章"linux入门系列15--文件传输之vsftp服务"讲解了文件传输,本篇继续讲解文件共享相关知识. 文件共享在生活和工作中非常常见,比如同一团队中不同成员需要共同维护同 ...
- python随用随学-元类
python中的一切都是对象 按着我的逻辑走: 首先接受一个公理,「python中的一切都是对象」.不要问为什么,吉大爷(Guido van Rossum,python之父)人当初就是这么设计的,不服 ...
- 关于地址栏url的一些小结
1.获取整个地址栏地址 //获取整个地址栏地址 var href = window.location.href; console.log(href); 以上代码就是获取整个url地址 2.获取url协 ...