在C语言中引入类的概念

2016-02-19 18:06 5 1 收藏

下面请跟着图老师小编一起来了解下在C语言中引入类的概念,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】


  基于对象的程序设计的好处大家应该都有一定的体会,但是在 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;
  }
  
  Qiyaismine@163.com

来源:http://www.tulaoshi.com/n/20160219/1616793.html

延伸阅读
在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子...
作者在使用C语言编程实践过程中发现,尽管所编程序从语法上看正确的,能够调试通过,但实际执行结果却达不到程序编制的目的。现举几例说明如下,希望能起到帮助C语言初学者少走弯路的作用。 一.调用unlink失败的原因及解决方法 !-- frame contents -- !-- /frame contents -- unlink的原型在”io.h”中,...
#pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和 C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 ...
1. exit 用于在程序运行的过程中随时结束程序,exit 的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。exit是结束一个进程,它将删除进程使用的内存空间,同...
当我在linux下写c语言的时候经常会遇到段错误. 所以就来细究一下.   段错误或段违规(segmentation violation) 查看Expert C Programming(Peter Van Der Linden) Pg.156 解释到段错误是由于内存管理单元(MMU)的异常所致, 而该异常则通常是由于解除引用一个未初始化或非法的指针引起. 就是指针正在引用一个并不位于你的地址空间中的地址....

经验教程

268

收藏

73
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部