- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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结构体以外的数据。经过这基本的结构体层层相套包含,对象简
单的继存关系就体现出来了:父对象放于数据块的最前方,代码中可以通过强制类型转换获
得父对象
您可能关注的文档
- 粉煤灰对稳定路面的影响.pdf
- 精品 八年级数学下册 一次函数基础题.pdf
- 精品课程申报书1.pdf
- 粒子探测技术第5章第5节.pdf
- 精品生存分析教程.pdf
- 精密板式直线导轨LinearPack.pdf
- 精开荒工作要求及验收标准.pdf
- 精彩回顾 正山堂首届全国主题摄影大赛(一).pdf
- 粮食工厂供电与自动化复习资料2015.pdf
- 精灵3系列产品参数.pdf
- 2024年江西省高考政治试卷真题(含答案逐题解析).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)物理试卷(含答案详解).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解).pdf
- 2024年内蒙通辽市中考化学试卷(含答案逐题解析).docx
- 2024年四川省攀枝花市中考化学试卷真题(含答案详解).docx
- (一模)长春市2025届高三质量监测(一)化学试卷(含答案).pdf
- 2024年安徽省高考政治试卷(含答案逐题解析).pdf
- (一模)长春市2025届高三质量监测(一)生物试卷(含答案).pdf
- 2024年湖南省高考政治试卷真题(含答案逐题解析).docx
- 2024年安徽省高考政治试卷(含答案逐题解析).docx
文档评论(0)