首页 > 代码库 > 函数的封装
函数的封装
第一次写这种风格的代码,就用了上一篇的代码来做的测试,一次成功(毕竟连看都没看过具体实现过程,就在cpp上看到过几句ifndef、endif,还是挺开心的),效果不错,但稍微感觉隐藏函数的实现的细节等,貌似运行慢了点,毕竟强行include了过来,不知道是不是错觉。
具体过程如下(我用的是VC++ 6.0):
在写好的代码工作室中添加头文件,名字就按自己的代码主要实现的是什么功能来命名比较好,比如 STACK.H,一看就知道是关于栈的,然后就没然后了。具体就看头文件的内容吧:
#ifndef _STACK_H #define _STACK_H #define MaxSize 50 //栈的最大空间 #define EmptyToStack -1 //空栈判断 typedef int ElemType; typedef int Status; //状态函数 typedef struct Stack { int base; //栈底 int top; //栈顶 ElemType * Array; }Stack; /* 定义所有函数 */ Stack * CreateStack(); void DestroyStack(); void MakeEmpty(); int IsEmpty(); int IsFull(); int StackLen(); Status Push(); ElemType Pop(); ElemType Top(); #endif
然后,再在工作室中添加一个xxx.c的文件,这个文件的作用就是用来写具体函数功能的实现细节的,也就是说把所有函数全部封装到这个文件中,然后记得#include "stack.h"
以我写的顺序栈的实现的代码为例:
/* stack.c */ #include<stdio.h> #include<stdlib.h> #include"stack.h" /* 状态参数 */ #define OK 1 #define ERROR 0 Stack * CreateStack(int MaxStackSize) //创建栈 { Stack * s; s = (Stack *)malloc(sizeof(Stack)); s -> Array = malloc(sizeof(ElemType) * MaxStackSize); if(!(s -> Array || s)) puts("ERROR!"); s -> base = MaxStackSize; MakeEmpty(s); return s; } void DestroyStack(Stack * p) //栈的释放 { if(p != NULL) { free(p -> Array); free(p); } } void MakeEmpty(Stack * p) //空栈 { p -> top = EmptyToStack; } int IsEmpty(Stack * p) //检测一个栈是否为空 { return (p -> top == EmptyToStack); } int IsFull(Stack * p) //检测栈是否满 { return (p -> top == MaxSize - 1); } Status Push(Stack * p, ElemType X) //压栈 { if( IsFull(p) ) { puts("FULL!"); return ERROR; } else p -> Array [++ p -> top] = X; return OK; } int StackLen(Stack * p) //栈的长度 { return p -> top + 1; } ElemType Pop(Stack * p) //弹栈 { if( IsEmpty(p) ) { puts("NULL!"); return ERROR; } else return p -> Array [p -> top --]; } ElemType Top(Stack * p) //获取栈顶元素 { if( !IsEmpty(p) ) return p -> Array [p -> top]; else return 0; }
这样就差不多了,当然主要的调用接口的文件里也需要添加#include "stack,h" ,且原先里面的所有函数是全部剪切到stack.c文件的,自然就不用重复出现这些函数的实现代码了,原先里面的所有函数的定义是剪切到stakc.h中的,也不用再重复定义了,然后点击编译链接的时候三个会一起编译链接。
函数的封装
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。