Объектно-ориентированный код в C

Рейтинг: 3Ответов: 2Опубликовано: 23.01.2011

Поскольку OO - это шаблон программирования, а не неотъемлемое свойство языка, он должен быть применим и к C. Как пишут ОО-код в C, когда это нужно и когда нельзя задействовать C++?

Ответы

▲ 4Принят

Ну, суть сказали - использовать структуры для хранения контекста конкретных объектов. И передавать соответствующую структуру аргументом в функции. Которые уже будут работать с этой структурой как с классом =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);
}

Ну, в таком духе.

▲ 3

Ну и вопросик. Как пишут - не знаю, объяснить тем более не смогу. Но могу назвать классический пример - библиотека графических виджетов Tk (из известной связки Tcl/Tk). На классику ООП весьма похоже, написано на C, исходники открыты и статей куча. Но энтузиазм с этим знакомиться должен быть свой.