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结构体以外的数据。经过这基本的结构体层层相套包含,对象简
单的继存关系就体现出来了:父对象放于数据块的最前方,代码中可以通过强制类型转换获
c语言实现协议层层消息,纯C语言实现面向对象分析与示例分享.pdf相关推荐
- c语言模拟java面向对象_纯c语言实现面向对象分析与示例分享
#include #include //接口 #ifndef Interface #define Interface struct #endif //类 #ifndef Class #define C ...
- c语言坦克大战程序设计,用纯C语言实现坦克大战
好久没给大家看有意思的C语言实现的代码了,今天给大家分享一个C语言实现坦克大战的游戏源码,依旧是纯C语言,点c文件,但是是在TC的环境下,运行效果截图如下: 上下左右控制方向,空格为发射炮弹,还带声音 ...
- 【MATLAB库函数系列】resample(重采样函数)的C语言实现【姊妹篇2纯C语言实现】
resample的原理 MATLAB中resample函数最简单的参数如下: y = resample(x,p,q) 以p/q乘以原始采样速率对输入序列x重新采样.resample在x上应用抗锯齿FI ...
- MATLAB库函数upfirdn(分数倍采样率变换)的C语言实现【姊妹篇2纯C语言实现】
upfirdn原理 yout = upfirdn(xin,h,p,q) upfirdn的功能在MATLAB官方帮助文档中说得很清楚 通过插零实现 p p p倍上采样 对上采样之后的信号用给定的 h h ...
- C语言黑白bmp转字节流,纯C语言对BMP图像的灰度化二值化
#include "Windows.h" #include #include //using namespace std; // 这个动态申请二维内存(指针数组)的函数很有意思 t ...
- 服务器云ide_语言服务器协议如何影响IDE的未来
服务器云ide The release of Visual Studio Code single-handedly impacted the developer ecosystem in such a ...
- Visual Studio 编写纯C语言程序
本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序,这里的纯C语言,指的是 ANSI C 语言. 要在 Visual Studio 里创建一个 ANSI C语言程序,请按以下步骤执 ...
- visual studio 如何编写c语言程序,用Visual Studio 编写纯C语言程序
本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序,这里的纯C语言,指的是 ANSI C 语言. 要在 Visual Studio 里创建一个ANSI C语言程序,请按以下步骤执行 ...
- 用ram实现寄存器堆_纯C语言实现bootloader
之前有用很少一部分汇编实现过bootloader,但经过后来慢慢改进,发现是可以用纯C语言实现嵌入式操作系统的引导. 下面是之前对不能完全使用C语言引导系统的几点说明: 1.C程序中所有的代码都是以函 ...
最新文章
- mxnet slice_axis
- s2sh乱码一个小处理(新手按流程走)
- MIS性能优化常见问题与方案(辅助项目组性能优化的总结贴)
- 将一个简单远程调用的方式例子改为异步调用 -- 2
- C语言程序main入口函数
- c#之using关键字
- 漫画:图的 “最短路径” 问题 | 技术头条
- cv2 imwrite中文路径_python3下使用cv2.imwrite存储带有中文路径图片的方法
- datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集
- 六条“黑客伦理”(hacker ethic)
- 使用php第三方包mpdf将网页装换成pdf文件【2】
- opencv 实现等值线_OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)...
- 内存分配失败错误处理
- python统计表中单词及其出现的次数 字典形式输出_Python统计文本词汇出现次数的实例代码...
- java从0单排之java就业培训教程复习与面试题回顾——03
- RoboWare Studio入门教程(一)
- chm sharp安卓版_CHM Sharp(CHM阅读器)
- java课程设计 成绩_Java课程设计—学生成绩管理系统(201521123005 杨雪莹)
- idea里面解决jsp,html,xml黄色背景的方法
- 阻止浏览器默认行为事件
热门文章
- linux device_create_file属性 怎么调用,device_create_file创建多级目录
- vscode 语法检查_Jenkins 声明式流水线的语法错误检查
- Java集合源码解析之ArrayList
- 【可观测之ELK】elk+logback+redis 搭建日志平台
- 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?
- java动态删除map元素报错_java map使用迭代器遍历时执行删除元素报空指针异常
- 销售系统软件mysql_Max(TM)销售管理系统
- Java 设计模式之 Observer 模式
- java flink使用addSink方法保存流数据到redis
- python正则表达式使用修饰符