您的位置:首页 > 编程语言 > C语言/C++

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分了,自己越来越懒了,下班回家了就啥也不想干了,虽然还有那么多未干的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: