- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
轻量级的面向对象C语言编程框架介绍.
轻量级的面向对象C语言编程框架LW_OOPC介绍
金永华、陈国栋
2010/03/02
摘要:
本文介绍一种轻量级的面向对象的C语言编程框架:LW_OOPC。LW_OOPC是Light-Weight Object-Oriented Programming in(with) C的缩写,总共一个.h文件,20个宏,约130行代码,非常的轻量级,但却很好的支持了很多面向对象的特性,比如继承、多态,可以优美的实现面向接口编程。这个框架系由台湾的高焕堂先生以及他的MISOO团队首创,之后由我继续改进优化,最后,经高焕堂同意以LGPL协议开源(开源网址参见后文)。
用C语言实现OO?我没听错吗?这听起来真是太疯狂了!… 大家都知道,C++支持了面向对象和面向泛型编程,比C要更强大些。那么,为什么要在C语言中实践面向对象呢?为什么不直接使用C++呢?
为什么要用面向对象?
面向过程方式开发的系统,代码复杂,耦合性强,难以维护,随着我们所要解决的问题越来越复杂,代码也变得越来越复杂,越来越难以掌控,而面向对象改变了程序员的思维方式,以更加符合客观世界的方式来认识世界,通过合理的运用抽象、封装、继承和多态,更好的组织程序,从而很好地应对这种复杂性。
为什么不直接使用C++?
C和C++之争由来已久,可能要持续到它们中的一种去世^_^。C语言以其简洁明快,功能强大的特点,深得开发人员的喜爱,尤其是在嵌入式开发领域,C语言更是占据了绝对老大的地位。在我看来,语言只是工具,作为程序员,我们要做的是:选择合适的语言,解决恰当的问题。我们要尊重事实,考虑开发环境(软硬件环境),考虑团队成员的水平,从商用工程的角度讲,选择团队成员擅长的语言进行开发,风险要小很多。
一些从Java/C#转到C的程序员们,无法从面向对象切换到面向过程,但又必须与C语言同事们在遗留的C系统上开发软件,他们有时会非常困惑:C语言是面向过程的编程语言,如何实践面向对象,甚至面向接口编程呢?此时,就非常需要在C语言中实现面向对象的手段,而LW_OOPC正是应对这一难题的解决之道。
LW_OOPC是什么?
简而言之:LW_OOPC是一套C语言的宏,总共1个.h文件(如果需要内存泄漏检测支持以及调试打印支持,那么还需要1个.c文件(lw_oopc.c,约145行)),20个宏,约130行代码。LW_OOPC是一种C语言编程框架,用于支持在C语言中进行面向对象编程。
LW_OOPC宏介绍
下面,先通过一个简单的示例来展示LW_OOPC这套宏的使用方法。我们要创建这样一些对象:动物(Animal),鱼(Fish),狗(Dog),车子(Car)。显然,鱼和狗都属于动物,都会动,车子也会动,但是车子不是动物。会动是这些对象的共同特征,但是,显然它们不属于一个家族。因此,我们首先考虑抽象出一个接口(IMoveable),以描述会动这一行为特征:
INTERFACE(IMoveable)
{
void (*move)(IMoveable* t); // Move行为
};
ABS_CLASS(Animal)
{
char name[128]; // 动物的昵称(假设小于128个字符)
int age; // 动物的年龄
void (*setName)(Animal* t, const char* name); // 设置动物的昵称
void (*setAge)(Animal* t, int age); // 设置动物的年龄
void (*sayHello)(Animal* t); // 动物打招呼
void (*eat)(Animal* t); // 动物都会吃(抽象方法,由子类实现)
void (*breathe)(Animal* t); // 动物都会呼吸(抽象方法,由子类实现)
void (*init)(Animal* t, const char* name, int age); // 初始化昵称和年龄
};
CLASS(Fish)
{
EXTENDS(Animal); // 继承Animal抽象类
IMPLEMENTS(IMoveable); // 实现IMoveable接口
void (*init)(Fish* t, const char* name, int age); // 初始化昵称和年龄
};
CLASS(Dog)
{
EXTENDS(Animal)
您可能关注的文档
- 赵县实验中学学考前复习必修一限时检测2..doc
- 赵卯先数学高考复习..doc
- 赵湾乡三道岭中心小学实行精细化管理方案..doc
- 赵燕勇实践报告..doc
- 赵鹏除草机械研究综述..doc
- 起重作业安全技术措施..doc
- 起重吊装作业的安全控制措施..doc
- 起重吊装全过程作业指导书..doc
- 起重吊装安全生产培训内容..doc
- 起重吊装安全管理方案..doc
- 服务顾问提高技能培训.ppt
- 【美妆护肤报告】2024年第23周-美妆行业周度市场观察-9页.docx
- T∕ZZB 0745-2018 汽车底盘专用高强度法兰螺栓.docx
- 部编版一年级语文下册暑假作业.doc
- T∕ZZB 0992-2019 燃气用埋地聚乙烯(PE)阀门.docx
- 一年级小学生语文周记250字.doc
- T∕ZZB 1116-2019 交流电动工具用电子模块.docx
- CNAS-EL-07:2014 纺织检测领域认可能力范围表述说明.docx
- T∕ZZB 1134-2019 INS免喷涂注塑成型模具.docx
- T_STACAES 006-2021_环卫保洁车辆清洗洒水车.pdf
最近下载
- 一种磁珠法无醇核酸提取试剂盒及其提取方法.pdf VIP
- 项目管理机构设置及人员配备.pdf VIP
- 2022年广西高考英语试题和答案(文字版) .pdf VIP
- 2025年天津市专业技术人员公需考试试题-为中国式现代化提供强大动力和制度保障——党的二十届三中全会暨《中共中央关于进一步全面深化改革、推进中国式现代化的决定》总体解读.docx VIP
- 读书伴我快乐成长(四年级主题班会).ppt VIP
- 二元Logistic回归教程文件.ppt VIP
- 呼吸内科护士理论考试题附答案.doc
- 2015年6月大学英语四级考试真题.doc VIP
- 《中国考古学 III》课件:3_1 秦代墓葬.ppt
- 中华中医药学会体质辨识标准——体质分类与判定.pdf VIP
文档评论(0)