Здравствуйте, alien3128, Вы писали:
A>Коллеги, подскажите, как на языке С можно эмулировать такое свойство ООП, как инкапсуляция?
A>Т.е. нужно иметь объект, все данные которого являются приватными. И должна быть возможность создавать неограниченное количество однотипных объектов.
Функции работы с файлом как раз являются таким примером.
// Только объявляем
struct FILE;
FILE* f = fopen(...); // Создание объекта
fprintf(f, "%s", "A"); // Работа с объектом
fclose(f); // Разрушение объекта
Реализация например может быть такой
// Здесь детали реализации
struct FILE
{
char path[100];
}
static private_fopen(...) {return malloc(sizeof(FILE)};
FILE* fopen(...) { return private_fopen(...) }
void fprintf(FILE* f, char const* fmt, ...) { ... }
void fclose(FILE* f) { free(f); }
Как можно видеть детали 'класса' FILE скрыты от нас, и работать с ним возможно только через публичные фукнции.