zoukankan      html  css  js  c++  java
  • 学习笔记----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的面向对象化

  • 相关阅读:
    数据结构之内部排序--希尔排序
    数据结构之内部排序--直接插入排序
    MySQL
    力扣115,不同的子序列,动态规划,最大公共子序列问题变形
    算法复习——贪心
    算法复习——分治算法
    为什么我的打印机只能纵向打印不能横向打印
    git创建新的分支
    poj138——建立雷达,贪心,求线段交集
    Oracle数据库学习笔记
  • 原文地址:https://www.cnblogs.com/micro-st/p/chunchun-qianrushi-CClass.html
Copyright © 2011-2022 走看看