學習筆記—-C語言的面向對象

  • 2020 年 3 月 26 日
  • 筆記

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的面向對象化