學習筆記—-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的面向對象化