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直接操作することは決してありません。パス ポインターを前後に渡すだけです。
アクセス制御はありません。publicC 構造体の一部とその他の部分を作成することはできません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型が不完全であるため、 typeへのポインターmainのみを宣言できます。では、構造体型は の定義で完成されるため、 内の関数はそれらのメンバーにアクセスできます。 struct CarCar.cstruct Car {char *make; char *model; ...};Car.c