在C语言中引入类
来源:互联网 发布:知乎 150常数 编辑:程序博客网 时间:2024/06/06 23:31
基于对象的程序设计的好处大家应该都有一定的体会,但是在 C 语言中并不支持类的概念,不过我们可以通过 struct 实现一些基础的类对象,如队列、堆栈等。通过对象的实现可以在一定程度上提高编程效率、简化 C程序设计。下面使用一个例子来介绍下如何在实现一个简单的类,希望对大家有些益处:
/* 应用消息队列类 */
struct AppQueue{
struct AppFrame *pHead, *pTail;
void (*InQueue)(struct AppQueue *papq, struct AppFrame *apf);
struct AppFrame * (*OutQueue)(struct AppQueue *papq);
unsigned char (*Empty)(struct AppQueue *papq);
void (*ClearQueue)(struct AppQueue *papq);
};
/* AppQueue 类成员函数实体 */
void apq_InQueue(struct AppQueue *papq, struct AppFrame *apf)
{
if(apf == NULL) return;
apf->;pNext = NULL;
if(papq->;pTail != NULL){
papq->;pTail->;pNext = apf;
papq->;pTail = apf;
}
else{
papq->;pHead = papq->;pTail = apf;
}
}
struct AppFrame * apq_OutQueue(struct AppQueue *papq)
{
struct AppFrame *paf;
paf = papq->;pHead;
if(papq->;pHead != papq->;pTail){
papq->;pHead = papq->;pNext;
}
else{
papq->;pHead = papq->;pTail = NULL;
}
return paf;
}
unsigned char apq_Empty(struct AppQueue *papq)
{
if((papq->;pHead == papq->;pTail) && (papq->;pTail == NULL))
return TRUE;
else
return FALSE;
}
void apq_ClearQueue(struct AppQueue *papq)
{
struct AppFrame *paf;
while((paf = papq->;OutQueue(papq)) != NULL){
SysAppPool.Free(&SysAppPool, paf);
}
}
/* AppQueue 类对象初始化 */
void InitAppQueue(struct AppQueue *papq)
{
papq->;pHead = papq->;pTail = NULL;
papq->;InQueue = apq_InQueue;
papq->;OutQueue = apq_OutQueue;
papq->;Empty = apq_Empty;
papq->;ClearQueue = apq_ClearQueue;
}
/* 应用消息队列类 */
struct AppQueue{
struct AppFrame *pHead, *pTail;
void (*InQueue)(struct AppQueue *papq, struct AppFrame *apf);
struct AppFrame * (*OutQueue)(struct AppQueue *papq);
unsigned char (*Empty)(struct AppQueue *papq);
void (*ClearQueue)(struct AppQueue *papq);
};
/* AppQueue 类成员函数实体 */
void apq_InQueue(struct AppQueue *papq, struct AppFrame *apf)
{
if(apf == NULL) return;
apf->;pNext = NULL;
if(papq->;pTail != NULL){
papq->;pTail->;pNext = apf;
papq->;pTail = apf;
}
else{
papq->;pHead = papq->;pTail = apf;
}
}
struct AppFrame * apq_OutQueue(struct AppQueue *papq)
{
struct AppFrame *paf;
paf = papq->;pHead;
if(papq->;pHead != papq->;pTail){
papq->;pHead = papq->;pNext;
}
else{
papq->;pHead = papq->;pTail = NULL;
}
return paf;
}
unsigned char apq_Empty(struct AppQueue *papq)
{
if((papq->;pHead == papq->;pTail) && (papq->;pTail == NULL))
return TRUE;
else
return FALSE;
}
void apq_ClearQueue(struct AppQueue *papq)
{
struct AppFrame *paf;
while((paf = papq->;OutQueue(papq)) != NULL){
SysAppPool.Free(&SysAppPool, paf);
}
}
/* AppQueue 类对象初始化 */
void InitAppQueue(struct AppQueue *papq)
{
papq->;pHead = papq->;pTail = NULL;
papq->;InQueue = apq_InQueue;
papq->;OutQueue = apq_OutQueue;
papq->;Empty = apq_Empty;
papq->;ClearQueue = apq_ClearQueue;
}
0 0
- 在C语言中引入类
- 在C语言中引入了面向对象的思想
- swift 中引入外部类C
- 在类的头文件中尽量少引入其他头文件 <<Effective Objective-C>>
- 在swift项目中引入obj-c代码的注意事项
- 在Intellij Idea中怎么引入c标签
- 在Intellij Idea中怎么引入c标签
- 在Intellij Idea中怎么引入c标签
- 在Intellij Idea中怎么引入c标签
- C语言头文件引入
- C语言多线程的引入
- 逗号在C语言中
- -> 在c语言中是什么意思?
- Effective Objective-C 2.0 第2条:在类的头文件中尽量少引入其它头文件
- 在nanowar中引入AOP
- 在HTML中引入CSS
- 在内核中引入代码
- 在网页中引入PDF
- 测试一下好不好用
- android中Invalidate和postInvalidate的区别
- Linux 系统命令及其使用详解(大全)
- Confluence 流行的标签(Popular Labels)宏
- USACO 3.2 Magic Squares (msquare)
- 在C语言中引入类
- HDOJ 1423 Greatest Common Increasing Subsequence -- 动态规划
- Installing RPMforge
- 简单实现ArrayList
- busybox init 过程
- 记住实用的调试方法
- js function定义函数的几种方法
- Unity3D脚本教程1:脚本概览
- USACO 3.2 Sweet Butter (butter)