C 等效项是为Car
的属性定义结构类型,然后定义函数来操作类型的对象Car
。这基本上就是FILE
类型的工作原理:
FILE *f = fopen("afile.txt", "r"); // open a file for reading
fgets(buffer, sizeof buffer, f); // read from a file
fprintf(f, "%d on the wall", bottles--); // write formatted text to the file
我们绝不会直接操作FILE
类型的对象;我们只是来回传递传递指针。
没有访问控制;您不能制作 C 结构的某些部分public
和其他部分private
;您可以像这样隐藏实现:
/** Car.h */
...
struct Car;
struct Car *createCar(void);
void deleteCar(struct Car **theCar);
int startCar(struct Car *theCar);
...
/** Car.c */
#include "Car.h"
...
struct Car {
char *make;
char *model;
int year;
...
};
struct Car *createCar(void)
{
struct Car *p = malloc(sizeof *p);
if (p)
{
... // initialize attributes
}
return p;
}
void deleteCar(struct Car **theCar)
{
free(*theCar);
*theCar = NULL;
}
void startCar(struct Car *theCar)
{
theCar->running = 1;
}
/** main.c */
#include "Car.h"
...
int main(void)
{
struct Car *c = createCar();
startCar(c);
...
deleteCar(&c);
}
在此示例中,仅在;中main.c
看到前向声明 由于类型不完整,只能声明指向类型的指针。在中,结构类型与定义一起完成,因此其中的函数可以访问这些成员。 struct Car;
Car.h
main
struct Car
Car.c
struct Car {char *make; char *model; ...};
Car.c