实现类的封装:对象具有一定的内存空间,我们可以向其中放入和取出信息。首先定义模拟类
#pragma once
typedef struct
{
int m_maxlen;
//模拟成员变量(MemberVariable)
char* m_info;
}SimClass; //模拟类(Class)
void CSimClass(SimClass* sc, int maxlen);//模拟构造函数(Constructor)
void DSimClass(SimClass* sc);//模拟析构函数(Destructor)
int SimClass_Save(SimClass* sc, const char* info);//模拟成员函数(MemberFunction)
int SimClass_Load(SimClass* sc, char** info);
接着在同名.c文件中实现方法
#include<stdio.h>
#include "SimClass.h"
//SimClass.c(注意而非.cpp)
void CSimClass(SimClass* sc, int maxlen)
{
sc->m_maxlen = maxlen;
sc->m_info = (char*)malloc(sizeof(char)* maxlen);//开辟一段空间
}
void DSimClass(SimClass* sc)
{
free(sc->m_info);//释放一段空间
}
int SimClass_Save(SimClass* sc, const char* info)
{
if (sc->m_maxlen < strlen(info))
return-1;//信息太长
strcpy(sc->m_info, info);
return 0;//成功
}
int SimClass_Load(SimClass* sc, char** info)
{
*info = sc->m_info;
return 0;//成功
}
这样类就实现完成了。我们这种方法是用
SimClass_
用来模拟C++的函数前缀"SimClass::",这样就避免了多个类的同名函数造成的重定义。然后再将结构体
SimClass*sc
作为第一个参数传入成员函数,这样在成员函数中就能够访问类的成员变量了。
封装后就能够很容易地复用了:例如
#include<stdio.h>
#include "SimClass.h"
int main()
{
SimClass SCA, SCB;
CSimClass(&SCA, 64);
CSimClass(&SCB, 32);
SimClass_Save(&SCA, "ao好久不见\0");
SimClass_Save(&SCB, "hdgkajsh");
char* buf;
SimClass_Load(&SCA, &buf);//取
printf("%s", buf);
char* bufB;
SimClass_Load(&SCB, &bufB);//取
printf("%s", bufB);
//这样就可以打印出先前存的内容
DSimClass(&SCA);//也需要显式地析构
DSimClass(&SCB);
return 0;
}
❤️