在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 用C实现了面向对象,单片机可用,灵感源自LINUX内核

用C实现了面向对象,单片机可用,灵感源自LINUX内核

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.14M
  • 下载次数:8
  • 浏览次数:117
  • 发布时间:2021-02-27
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
面向对象 C 用此思想,可实现面向对象的软件工程思维, 写出高效的 工程型代码
C语言的面向对象 如前所说,面向对象是种软件设计的思想,是语言无关的。在本节中,我举个链表list的例了来说明如何在C语 言中的设计出有面向对象风格的代码。 定义接口 接∏是面向对象语言中的个比较重要的概念,接∏只对外部承诺实现该接∏的实体可以完成什么样的功能,但是不 暴露实现的方式。这样的好处是,实现者可以在不接触接口使用者的代码的情况下,对实现进行调整。 我们来看看链表的接口定义 清单1.链衣的接∏定义 23 #ifndef ILIST H 24 define ILIST H 26//定义链表中的节点结构 27 typedef struct node t 28 void *dat struct node next 30 Node 32定义链表结构 33 typedef struct listI struct list this 35 Node head Int sIze void(* insert)( void knode)://函数指针 oid (drop)(void *node) 39 void (clcar)O 40 int (*ge tSize)( voids(=get)(int index) 42 void (*print)o 43List 45 void insert(void *node) 46 void drop(void *node 47 void clear o 48 int getSize() 49 void* get(int index) 51 dif /米 ILISTⅡ 复制代码 IList接口中,可以清晰的看到,对于一个list实体(也就是对象)来说,可以在其上进行 insert.drop, clear, getsize, get(index)以及 print等操作。 接口的实现 清单2.构造方法 53Node来node=NULI 54 List *list nll 56 void insert(void *node 5 id drop(void xnode) 58 void clear o nt getsizc( 61 voids get(int index) 62 63 List List Construction 64 list=(List*)malloc(sizeof(List)) 65 node=(Node*)malloc(sizeof (Node)) 66 list->head ist-> insert= Insert;//将 Insert函数实现注册在list实体上 list→>d 69 list->clea 1st list>getsize- getsize t→>get-get 73 list- >print= print list->this-list;//用this指针将1ilst本身保存起来 76 return (List*)list 77 复制代码 需要注意的是此处的this指针,this指针可以保讦外部对list的操作映射到对this的操作上,从而使得代码得 到简化 清单3.插入及删除 78将一个node插入到一个1ist对象上 79 void insert(void *node)( Nade *current=(Node*)malloc(sizeof (ode)) 81 current->data= node current->next- list-> this->hcad->next (list-> this->size 86 88//删除一个指定的节点nde d drop (void node)( 90 Node冰t=1is-〉this->head for(i:i( list-> this->size:i-+ 94 d=list-> this->head->next if(d->data==((Node*)node)->data)( list-> this->head t=d 101 ist-> this->head list-> this-head->next 105} 复制代码 其他的实现代码可以参看下载部分,这里限于篇幅就不再意义列举出来。 测试 测试代码 好了,前面做的一切工作都是为了保证我们的暴露给使用者的API可以尽量的简洁,优美,现在到测试的时候了: 清单4.测试代码 106 int main (int argc, chark* argy)( 107List*1ist=(List*) Li st Construction0;//构造一个新的链表 109//插入一些值做测试 list>insert("Apple 111 list->insert(Borland) 112 list>insert("Cisco") 113 list->insert(" Dc11") list->insert(Electrolux 115 list->insert("FireFox") 116 list->insert(Google") 1181ist-> print(;//打印整个列表 120 printf(" list size-%d'\n", list->getSize() 121 122 ode node node data=Electrolux 124 node, next= AULL. 1251ist)drop(&node);//删除个节点 126 127 node data=cisco 128 node, next NULL 1291ist-drop(rode);//删除另一个节点 130 1311ist-> print(;//冉次打印 132 printf( list sizc- %d'\n", list->gctSizc()) 133 list-> clear(;//清空列表 134 135 return 复制代码 图1.运行结果 gE49998 nu11》 [GG499ADG] (Google) EE499角四1={ FireFox [5G499A75= eLectrolux> c4941=De11 EE4991]={G1sc [E4999EI = Borland [四4999丽]=npp1e 1且sti2e=7 [E49998]={(nu11》 [G6499ADG =Google> [I499AA =FireFox> [E4994]=De113 [EI4 99E5I =bOrland [G64999] =(Apple> list size =5 结束语 C语言所诞生的UNIX平台提侣这样一种设计晢学:尽量进行简单的设计,让使用者如同搭积木一样的将这些简单的工具连 成强人的,完整的应用。应该说,C比较好的绊承了这一点,C语言非常简洁,非常强人,而由于C语言诞生的比较早, 时的面向对象的思想还不成熟,所以出现了大量的过程式的C应用,从而给人们一种C语言是面向过程的语言的错觉,其实 只是提供了一些简单,强大而通用的能力,至于你想将其搭成什么样的积木,则全靠你自己了 【实例截图】
【核心代码】

标签:

实例下载地址

用C实现了面向对象,单片机可用,灵感源自LINUX内核

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警