C语言面向对象-类
来源:互联网 发布:c语言中char什么意思 编辑:程序博客网 时间:2024/04/28 19:22
第一种方式:
.h文件,结构定义数据成员,提供函数接口
.c文件,实现接口
实际上是模块化编程,基于对象模式,不能够封装,继承等
第二种方式:
.h文件,数据成员和操作定义在一个结构体,操作用函数指针表示
.c文件,定义实现操作函数
基本上对象的面向对象,可以实现继承,多态,但是封装不够好,能够直接访问和操作成员变量
第三种方式:
.h文件,结构中定义操作结构
.c,定义一个机构专门用于存储私有成员和操作
做到真正封装,可以实现继承,多态,便于使用各种设计模式
相关实例代码
queue.h:
#ifndef _QUEUE_H
#define _QUEUE_H
#define QUEUE_SIZE 20
typedef struct Queue Queue;
typedef struct Queue* PQueue;
//typedef int (* WNDPROC)(HWND, int, WPARAM, LPARAM);
typedef int (*IsFullFunc)(const PQueue);
typedef int (*IsEmptyFunc)(const PQueue);
typedef int (*InsertFunc)(PQueue const, int);
typedef int (*RemoveFunc)(PQueue const);
struct Queue
{
#if 0
// data
char buf[QUEUE_SIZE];
int head;
int size;
int tail
#endif
// method
int (*isFull)(const PQueue me);
int (*isEmpty)(const PQueue me);
int (*getSize)(const PQueue me);
int (*insert)(PQueue const me, int val);
int (*remove)(PQueue const me);
};
// operations
// create and destroy
PQueue Queue_Create();
void Queue_Destroy();
#endif
queue.c:
#include "Queue.h"
#include "includes.h"
#define DeclarePrv(me) PQueuePrv prv = (PQueuePrv)((INT8U*)me+sizeof(Queue));
typedef struct QueuePrv QueuePrv;
typedef struct QueuePrv * PQueuePrv;
struct QueuePrv
{
char buf[QUEUE_SIZE];
int head;
int size;
int tail;
};
// operations
static int isEmpty(const PQueue me)
{
DeclarePrv(me);
return prv->head == prv->tail;
}
static int isFull(const PQueue me)
{
DeclarePrv(me);
//取余,good
return (prv->head+1)%QUEUE_SIZE == prv->tail;
}
static int getSize(const PQueue me)
{
DeclarePrv(me);
return prv->size;
}
static int insert(PQueue const me, int val)
{
DeclarePrv(me);
if (!me->isFull(me))
{
prv->buf[prv->head] = val;
prv->head = (prv->head+1)%QUEUE_SIZE;
++prv->size;
}
return 0;
}
static int remove(PQueue const me)
{
int value = -9999;
DeclarePrv(me);
if (!me->isEmpty(me))
{
value = prv->buf[prv->tail];
prv->tail = (prv->tail+1)%QUEUE_SIZE;
--prv->size;
}
return value;
}
// constructor and destructor
static void Queue_Init(PQueue const me,
int (*isEmpty)(const PQueue me),
int (*isFull)(const PQueue me),
int (*getSize)(const PQueue me),
int (*insert)(PQueue const me, int val),
int (*remove)(PQueue const me))
{
DeclarePrv(me);
memset(prv, 0, sizeof(QueuePrv));
me->isEmpty = isEmpty;
me->isFull = isFull;
me->getSize = getSize;
me->insert = insert;
me->remove = remove;
}
static void Queue_Cleanup(PQueue const me)
{
}
// create and destroy
PQueue Queue_Create()
{
PQueue me = (PQueue)malloc(sizeof(Queue) + sizeof(QueuePrv));
if (me != NULL)
{
Queue_Init(me, isEmpty, isFull, getSize, insert, remove);
}
return me;
}
void Queue_Destroy(PQueue me)
{
if (me != NULL)
{
Queue_Cleanup(me);
free(me);
}
}
test.c:
#include <stdio.h>
#include <stdlib.h>
#include "Sensor.h"
#include "Queue.h"
void Queue_Test()
{
int i = 0;
PQueue pQue = Queue_Create();
for (; i<10; i++)
{
pQue->insert(pQue, i);
}
for (i=pQue->getSize(pQue); i--; i>=0)
{
printf("pos %d, value=%d\n", i, pQue->remove(pQue));
}
printf("size = %d \n", pQue->getSize(pQue));
}
int main()
{
//Sensor_Test();
Queue_Test();
return 0;
};
- C语言面向对象-类
- C语言面向对象
- C语言面向对象
- c语言编写面向对象的类
- C语言中的面向对象
- C语言的面向对象
- C语言与面向对象
- C语言中的面向对象
- c语言应用面向对象
- C语言也面向对象
- c语言实现面向对象
- C语言实现面向对象
- C语言面向对象编程
- Objective-C语言:面向对象
- C语言面向对象编程
- C语言面向对象编程
- C语言面向对象编程
- C语言实现面向对象
- Linux下如何聊天-irc,MSN,ICQ,QQ你会用了吗?
- erlang 变量
- 关于压缩软件
- Windows Store apps开发[15]如何获取设备当前位置
- CLisp 9:获取系统环境变量,执行外部程序
- C语言面向对象-类
- On Knowledge Inflation: 知识通胀时代来临, 及为什么员工动力不足是伪命题
- SGU 441 Set Division(矩阵,斯特灵数)
- JMS开发指南
- HDU1217 Arbitrage (Bellman_ford)
- Visual C++界面美化(1)
- 我谈阶梯博弈(Staircase Nim)
- erlang Atoms
- jms需要注意