Re: Язык С и инкапсуляция
От: _NN_ www.nemerleweb.com
Дата: 14.05.15 06:00
Оценка: +4
Здравствуйте, 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 скрыты от нас, и работать с ним возможно только через публичные фукнции.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.