欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

C的面向对象化

发布时间:2025/4/5 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C的面向对象化 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

1.在面向对象的语言里面,出现了类的概念。类是对特定数据的特定操作的集 合体。类包含了两个范畴:数据和操作。而C语言中的struct仅仅是数据的 集合,我们可以利用函数指针将struct模拟为一个包含数据和操作的”类”。

2.用C程序模拟一个最简单的“类”

#define C_Class struct 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、CANCEL键则调用该焦点菜单对应的处理函数。 

传统的方法

/* 按下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;…} }

使用C面向对象的方法

/* 将菜单的属性和操作“封装”在一起,声明菜单项的“类”*/ 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, menu1OnCancel },{ " menu2", 7, 48, menu2OnOk, menu2OnCancel },{ " menu3", 14, 48, menu3OnOk, menu3OnCancel }… }; /* 按下OK键*/ void onOkKey() { menu[currentFocusMenu].onOkFun(); } /* 按下Cancel键*/ void onCancelKey() {menu[currentFocusMenu].onCancelFun(); }

 

1.程序被大大简化了,也开始具有很好的可扩展性! 
2.利用了面向对象中的封装思想,使程序结构清晰,其结果是几乎可以在无需 修改程序的情况下在系统中添加更多的菜单,而系统的按键处理函数保持不变。  

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的C的面向对象化的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。