c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf

纯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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值