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
直接操作することは決してありません。パス ポインターを前後に渡すだけです。
アクセス制御はありません。public
C 構造体の一部とその他の部分を作成することはできません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 Car
Car.c
struct Car {char *make; char *model; ...};
Car.c