Объектно-ориентированный код в C
Поскольку OO - это шаблон программирования, а не неотъемлемое свойство языка, он должен быть применим и к C. Как пишут ОО-код в C, когда это нужно и когда нельзя задействовать C++?
Источник: Stack Overflow на русском
Поскольку OO - это шаблон программирования, а не неотъемлемое свойство языка, он должен быть применим и к C. Как пишут ОО-код в C, когда это нужно и когда нельзя задействовать C++?
Ну, суть сказали - использовать структуры для хранения контекста конкретных объектов. И передавать соответствующую структуру аргументом в функции. Которые уже будут работать с этой структурой как с классом =3
Пример:
typedef struct { // контекст объекта с чем угодно внутри
int x;
int y;
} nya;
typedef nya * pnya;
void nya_construct (pnya this) // конструктор
{
this->x = 0;
this->y = 0;
}
void nya_incx (pnya this) // метод 1
{
this->x++;
}
void nya_decy (pnya this) // метод 2
{
this->y--;
}
int main (void) // использование
{
pnya first = (pnya)malloc(sizeof(nya)); // объект 1
pnya second = (pnya)malloc(sizeof(nya)); // объект 2
nya_construct(first); // конструируем
nya_construct(second);
nya_incx(first); // исполняем метод в контексте объекта 1
free(first); // удаляем. Деструктора нет, его не вызываем
free(second);
}
Ну, в таком духе.
Ну и вопросик. Как пишут - не знаю, объяснить тем более не смогу. Но могу назвать классический пример - библиотека графических виджетов Tk (из известной связки Tcl/Tk). На классику ООП весьма похоже, написано на C, исходники открыты и статей куча. Но энтузиазм с этим знакомиться должен быть свой.