C语言中面相对象的编程
面向对象的重要思想就是数据隐藏,在面向对象语言中,对象可以包含私有变量。这样我们可以说他们具有内部状态,这些内部状态对其他对象是透明的。全局变量可以通过设置变量作用域来模拟私有变量(甚至友元对象)。
首先是C语言中公共变量的对等实现
这些全局变量会导致意大利面条式的代码。为了避免这些问题,可以在函数外部用static关键字定义一个私有变量,并且定义在文件的头部。
static 关键字在不同的地方用处不一样。
一组松散的变量有点难以追踪,所以可以考虑将一个模块内部的私有变量封装到结构体中:
struct sLogStruct* LogInit(){
tBoolean logOn;
static enum eLogLevel outputLevel[NUM_LOG_SUBSYSTENS];
}sLogStruct;
Static struct sLogStruct gLogData;
如果想让代码看起来像个对象,那么这个结构体就不应该是这个模块的一部分,而英国在初始化的时候创建(分配内存malloc),然后将其返回给调用函数。
struct sLogStruct *LogInit(){
int I;
struct sLogStruct *logData = malloc(sizeof(*logData));
logData->logOn = FALSE;
for(I = 0; I
{
logData->outputLevel = eNoLogging;
}
return logData;
}
这样就可以想对象一样传递这个结构体了。malloc了的变量记得要释放,在接口中会增加一个函数去释放就可以了。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。