纯C语言实现面向对象分析与示例分享.pdf

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
纯C语言实现面向对象分析与示例分享

采用 语言实现的关键是如何运用 语言本身的特性来实现多态、继承面、封装的面向对 C C 象的特征最近给出了例子,大家可以参考使用 , C语言的对象化模型 面向对象的特征主要包括: .封装,隐藏内部实现 .继承,复用现有代码 .多态,改写对象行为 1.1 封装 封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数 据的方法 (函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外 特性 (对象能接受哪些消息,具有那些处理能力),而对象的内特性 (保存内部状态的私有 数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的 使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。 在C语言中,大多数函数的命名方式是动词+名词的形式,例如要获取一个semaphore,会 命名 成take_semaphore,重点在take这个动作上。面向对象编程中刚好相反,命名为rt_sem_ take,即名词+动词的形式,重点在名词上,体现了一个对象的方法。另外对于某些方法, 仅局限在对象内部使用,它们将采用static修辞把作用范围局限在一个文件的内部。通过 这样的方式,把一些不想让用户知道的信息屏蔽在封装里,用户只看到了外层的接口,从而 形成了面向对象中的最基本的对象封装实现。 一般属于某个类的对象会有一个统一的创建,析构过程。 对象内存数据块已经存在,需要对它进行初始化 –rt_sem_init;对象内存数据块还未分配, 需要创建并初始化 –rt_sem_create。可以这么认为,对象的创建(create)是以对象的初 始化(init)为基础的,创建动作相比较而言多了个内存分配的动作。 相对应的两类析构方式: .由rt_sem_init初始化的semaphore对象 –rt_sem_detach; .由rt_sem_create创建的semaphore对象 –rt_sem_delete. 1.2 继承 继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继 承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承 (一个子类只 有一父类)和多重继承 (一个类有多个父类,当前RT-Thread的对象系统不能支持)。类的 对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不 仅支持系统的可重用性,而且还促进系统的可扩充性。 类似的实现代码如下程序清单: 复制代码 代码如下: /* 父类 */ struct parent_class { int a, b; char *str; }; /* 继承于父类的子类 */ struct child_class { struct parent class p; int a, b; }; /* 操作示例函数*/ void func() { struct child_class obj, *obj_ptr; /* 子类对象及指针 */ struct parent_class *parent_ptr; /* 父类指针 */ obj_ptr obj; /* 取父指针 */ parent_ptr (struct parent*) obj; /* 可通过转换过类型的父类指针访问相应的属性 */ parent ptr-a 1; parent ptr-b 5; /* 子类属性的操作 */ obj ptr-a 10; obj ptr-b 100; } 在上面代码中,注意child_class结构中第一个成员p,这种声明方式代表child_class类 型的数据中开始的位置包含一个parent_class类型的变量。在函数func中obj是一个chi ld_class对象,正像这个结构类型指示的,它前面的数据应该包含一个parent_class类型 的数据。在第21行的强制类型赋值中parent_ptr指向了obj变量的首地址,也就是obj 变量中的p对象。好了,现在parent_ptr指向的是 一个真真实实的parent类型的结构,那么可以按照parent的方式访问其中的成员,当然也 包括可以使用和parent结构相关的函数来处理内部数据,因为一个正常的,正确的代码, 它是不会越界访问parent结构体以外的数据。经过这基本的结构体层层相套包含,对象简 单的继存关系就体现出来了:父对象放于数据块的最前方,代码中可以通过强制类型转换获 得父对象

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档