C语言实现类方式之文件
2012-02-08 23:29
351 查看
今晚的月光很好,刚好倾泻到我的书桌上,恬静、安详,心里却有一种孤独。这个城市仿佛与我无关、这里的人好像与我无关,自己坐在一个安静的角落里,泡一杯
茶水敲打着键盘,听着音乐,流淌自己的灵魂。人生吧,也许就这样,平淡而幸福,也许是最完美的追求。也只有在这样的夜晚,坐在窗户旁边,看着街边路灯发着懒懒的光,
什么都不想,让思维在那一刻停留,多么美好而单纯的感觉啊 !嘻嘻,写的这一段算是一段优美的前奏吧,接下来该写今天的东东了
C语言实现类的最简单的方式就是用文件作为包含边界,用一对文件(.h文件和.c文件)来表示一个类。
public的变量和函数写在.h文件中,private的变量和函数写在.c文件中-------------体现了类的封装性
以下是我摘录的Design Patterns for Embedded System in C里的一个例子:
设计了一个传感器类,嘻嘻,这么巧呢,我们公司就是专门卖传感器的,各式各样的。。。。。。。。。。。
传感器类Sensor,属性:data elements value, updateFrequency, filterFrequency
操作:getValue(), setValue(v: int), setUpdateFreq(r:int), getUpdateFreq(), setFilterFreq(ff: int), and getFilterFreq()
Sensor.h文件源码:
#ifndef Sensor_H
#define Sensor_H
/*## class Sensor */
typedef struct Sensor Sensor;
struct Sensor {
int filterFrequency;
int updateFrequency;
int value;
};
int Sensor_getFilterFrequency(const Sensor* const me);
void Sensor_setFilterFrequency(Sensor* const me, int p_filterFrequency);
int Sensor_getUpdateFrequency(const Sensor* const me);
void Sensor_setUpdateFrequency(Sensor* const me, int p_updateFrequency);
int Sensor_getValue(const Sensor* const me);
Sensor * Sensor_Create(void);
void Sensor_Destroy(Sensor* const me);
Sensor.c文件源码:
#include "Sensor.h"
void Sensor_Init(Sensor* const me) {
}
void Sensor_Cleanup(Sensor* const me) {
}
int Sensor_getFilterFrequency(const Sensor* const me) {
return me->filterFrequency;
}
void Sensor_setFilterFrequency(Sensor* const me, int p_filterFrequency) {
me->filterFrequency = p_filterFrequency;
}
int Sensor_getUpdateFrequency(const Sensor* const me) {
return me->updateFrequency;
}
void Sensor_setUpdateFrequency(Sensor* const me, int p_updateFrequency) {
me->updateFrequency = p_updateFrequency;
}
int Sensor_getValue(const Sensor* const me) {
return me->value;
}
Sensor * Sensor_Create(void) {
Sensor* me = (Sensor *) malloc(sizeof(Sensor));
What Is Embedded Programming? 13
if(me!=NULL)
{
Sensor_Init(me);
}
return me;
}
void Sensor_Destroy(Sensor* const me) {
if(me!=NULL)
{
Sensor_Cleanup(me);
}
free(me);
}
测试程序
应用测试
#include "Sensor.h"
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
Sensor * p_Sensor0, * p_Sensor1;
p_Sensor0 = Sensor_Create();
p_Sensor1 = Sensor_Create();
/* do stuff with the sensors ere */
p_Sensor0->value = 99;
p_Sensor1->value = -1;
printf("The current value from Sensor 0 is %d\n",
Sensor_getValue(p_Sensor0));
printf("The current value from Sensor 1 is %d\n",
Sensor_getValue(p_Sensor1));
/* done with sensors */
Sensor_Destroy(p_Sensor0);
Sensor_Destroy(p_Sensor1);
return 0;
}
这样就简单实现了一个传感器的类,但是这样只是基于对象的编程,还不是面向对象的编程,因为面向对象的编程的类的三个特征:
封装、继承、多态,到目前为止我们只触及到了封装,接下来我们将在此基础上做修改,实现继承和多态的特性,才是真正的面向对象噻!
一看时间10:30分了,自己越来越懒了,下班回家了就啥也不想干了,虽然还有那么多未干的事情。
茶水敲打着键盘,听着音乐,流淌自己的灵魂。人生吧,也许就这样,平淡而幸福,也许是最完美的追求。也只有在这样的夜晚,坐在窗户旁边,看着街边路灯发着懒懒的光,
什么都不想,让思维在那一刻停留,多么美好而单纯的感觉啊 !嘻嘻,写的这一段算是一段优美的前奏吧,接下来该写今天的东东了
C语言实现类的最简单的方式就是用文件作为包含边界,用一对文件(.h文件和.c文件)来表示一个类。
public的变量和函数写在.h文件中,private的变量和函数写在.c文件中-------------体现了类的封装性
以下是我摘录的Design Patterns for Embedded System in C里的一个例子:
设计了一个传感器类,嘻嘻,这么巧呢,我们公司就是专门卖传感器的,各式各样的。。。。。。。。。。。
传感器类Sensor,属性:data elements value, updateFrequency, filterFrequency
操作:getValue(), setValue(v: int), setUpdateFreq(r:int), getUpdateFreq(), setFilterFreq(ff: int), and getFilterFreq()
Sensor.h文件源码:
#ifndef Sensor_H
#define Sensor_H
/*## class Sensor */
typedef struct Sensor Sensor;
struct Sensor {
int filterFrequency;
int updateFrequency;
int value;
};
int Sensor_getFilterFrequency(const Sensor* const me);
void Sensor_setFilterFrequency(Sensor* const me, int p_filterFrequency);
int Sensor_getUpdateFrequency(const Sensor* const me);
void Sensor_setUpdateFrequency(Sensor* const me, int p_updateFrequency);
int Sensor_getValue(const Sensor* const me);
Sensor * Sensor_Create(void);
void Sensor_Destroy(Sensor* const me);
Sensor.c文件源码:
#include "Sensor.h"
void Sensor_Init(Sensor* const me) {
}
void Sensor_Cleanup(Sensor* const me) {
}
int Sensor_getFilterFrequency(const Sensor* const me) {
return me->filterFrequency;
}
void Sensor_setFilterFrequency(Sensor* const me, int p_filterFrequency) {
me->filterFrequency = p_filterFrequency;
}
int Sensor_getUpdateFrequency(const Sensor* const me) {
return me->updateFrequency;
}
void Sensor_setUpdateFrequency(Sensor* const me, int p_updateFrequency) {
me->updateFrequency = p_updateFrequency;
}
int Sensor_getValue(const Sensor* const me) {
return me->value;
}
Sensor * Sensor_Create(void) {
Sensor* me = (Sensor *) malloc(sizeof(Sensor));
What Is Embedded Programming? 13
if(me!=NULL)
{
Sensor_Init(me);
}
return me;
}
void Sensor_Destroy(Sensor* const me) {
if(me!=NULL)
{
Sensor_Cleanup(me);
}
free(me);
}
测试程序
应用测试
#include "Sensor.h"
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
Sensor * p_Sensor0, * p_Sensor1;
p_Sensor0 = Sensor_Create();
p_Sensor1 = Sensor_Create();
/* do stuff with the sensors ere */
p_Sensor0->value = 99;
p_Sensor1->value = -1;
printf("The current value from Sensor 0 is %d\n",
Sensor_getValue(p_Sensor0));
printf("The current value from Sensor 1 is %d\n",
Sensor_getValue(p_Sensor1));
/* done with sensors */
Sensor_Destroy(p_Sensor0);
Sensor_Destroy(p_Sensor1);
return 0;
}
这样就简单实现了一个传感器的类,但是这样只是基于对象的编程,还不是面向对象的编程,因为面向对象的编程的类的三个特征:
封装、继承、多态,到目前为止我们只触及到了封装,接下来我们将在此基础上做修改,实现继承和多态的特性,才是真正的面向对象噻!
一看时间10:30分了,自己越来越懒了,下班回家了就啥也不想干了,虽然还有那么多未干的事情。
相关文章推荐
- 读取配置文件[方式一]之纯C语言实现
- FIFO队列-C语言头文件方式实现
- 用c语言实现文本文件中的字符筛选分析(一)
- 使用libpng,libjpeg从文件读取和从内存读取2中方式的实现
- 自定义标签(二)——tld文件方式实现自定义标签
- 开放定址散列表(平方探测法)实现文件C语言
- java 实现文件复制的两种方式
- C#利用WebClient实现两种方式下载文件
- linux常用文件I/O操作之文件共享的实现方式
- C语言实现二进制文件读写
- 多种方式实现文件下载功能
- 修改文件后缀的C语言实现
- 利用Selenium实现图片文件上传的两种方式
- C语言实现修改文本文件中的特定行
- C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
- 通过java递归思想实现以树形方式展现出该目录中的所有子目录和文件
- Android中Form Post方式提交,上传文件的实现
- 用C语言实现统计一个文件夹中各种文件的比例
- C语言实现myql中存取二进制文件
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)