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
은 Car.h
에서 전방 선언 struct Car;
을 본다; 형식이 불완전하기 때문에 main
은 포인터을 struct Car
으로 만 선언 할 수 있습니다. Car.c
에서는 구조체 유형이 struct Car {char *make; char *model; ...};
으로 완료되므로 Car.c
내의 함수가 해당 멤버에 액세스 할 수 있습니다.
귀하의 의견을 잘 듣고 있습니다 - 나는 당신과 동의합니다 – paulsm4
위키피디아의 ['typedef'] (http://en.wikipedia.org/wiki/Typedef)의 어떤 부분이 당신을 모호하게합니까? – mouviciel
C에는 복합 유형 ("structs")이 있지만 멤버 함수가있을 수 없으므로 OO 의미에서 "클래스"가 아닙니다. 그것들은 단지 복합 유형입니다. –