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语言的面向对象的更多相关文章

  1. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  2. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  3. [java学习笔记]java语言核心----面向对象基础

    1.面向对象概述 面向对象是java语言的核心.是对应于面向过程而言的. 面向过程:强调的是过程,即动作.在java中动作就是函数.C语言就是面向过程的. 如:把大象装进冰箱需要几步? 答:需要三步: ...

  4. [java学习笔记]java语言核心----面向对象之static关键字

    static关键字用处 用于修饰成员变量和成员函数 被修饰后的成员具有以下特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 使用注意 静态方法只能访问静态成员:非静态方 ...

  5. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  6. JavaSE学习笔记(3)---面向对象三大特性

    JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...

  7. JavaSE学习笔记(2)---面向对象基础

    JavaSE学习笔记(2)---面向对象基础 1.面向对象具有三大特征:封装性.继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能.所以面向对象 ...

  8. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  9. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

随机推荐

  1. nginx安装与fastdfs配置--阿里云

    上一篇文章:fastDFS 一二事 - 简易服务器搭建之--阿里云 做了fastDFS的服务安装和配置,接下来我们来看nginx的安装 第一步:安装nginx需要安装的一些环境: 1.例如: yum ...

  2. 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 ...

  3. 奇葩念头:微信能取代WP应用吗

         墙倒众人推,原本是再平常不过的事,但每次发生都显得特别凄凉--就和楼市买房买涨不买跌一样,在互联网行业,用户数量越多的产品或服务,就会越受到行业和大众青睐.而越是小众的产品或服务,虽然是要走 ...

  4. rpm报错warning: /var/tmp/rpm-tmp.1OZa8q: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY的解决

    参考链接:http://blog.51cto.com/zymin0823/1546537 报错: 解决:使用如下两个选项

  5. Redis: userd_memory使用超出maxmemory

    Redis:userd_memory使用超出maxmemory 一.问题现象 2018.12.30 19:26分,收到Redis实例内存使用告警“内存使用率299%>=80%”,检查实例info ...

  6. Nginx_安装

    1. 安装步骤 上传nginx上传nginx安装包到linux 安装gcc 1 yum -y install gcc-c++ gcc 查看是否安装gcc: 1 gcc -v 安装依赖库 1 yum - ...

  7. 我为什么要用CSDN博客?

    在今年的二月份,因老师说由于学习需要,我怀着抵触的情绪开通了之前闻所未闻的CSDN博客. 三月六号我发了第一篇原创文章,说实话感觉没什么意思,只是在完成老师留给的任务.接下来的几周一直按着老师的要求不 ...

  8. linux入门系列16--文件共享之Samba和NFS

    前一篇文章"linux入门系列15--文件传输之vsftp服务"讲解了文件传输,本篇继续讲解文件共享相关知识. 文件共享在生活和工作中非常常见,比如同一团队中不同成员需要共同维护同 ...

  9. python随用随学-元类

    python中的一切都是对象 按着我的逻辑走: 首先接受一个公理,「python中的一切都是对象」.不要问为什么,吉大爷(Guido van Rossum,python之父)人当初就是这么设计的,不服 ...

  10. 关于地址栏url的一些小结

    1.获取整个地址栏地址 //获取整个地址栏地址 var href = window.location.href; console.log(href); 以上代码就是获取整个url地址 2.获取url协 ...