在C语言中引入类

基于对象的程序设计的好处大家应该都有一定的体会,但是在 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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值