LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Появилась необходимость «подружить» процедурный язык Си и объекты.

Си замечательно дружит с объектами и ничто не мешает использовать в нём ООП. Другой вопрос в том, что у него нет встроенных средств для ООП.

SomeClass instant = new SomeClass();
instant.x = 1;
instant.SomeMetod(3);

Как сделать то же самое в терминах языка Си? Указатель ведь может ссылаться на что угодно в памяти.

struct SomeClass *instant = malloc(sizeof(*instant));
SomeClass_Constructor(instant);
instant->x = 1;
SomeClass_SomeMethod(instant, 3);
  • Наследование -> добавление структуры предка первым элементом новой структуры;
  • виртуальные функции -> указатели на функции;
  • this передаётся явно.

Но как уже написали выше, тебе нужно будет написать свою обёртку для этого. Или попробовать найти какой-нибудь готовый генератор обёрток.

Исходная версия Deleted, :

Появилась необходимость «подружить» процедурный язык Си и объекты.

Си замечательно дружит с объектами и ничто не мешает использовать в нём ООП. Другой вопрос в том, что у него нет встроенных средств для ООП.

SomeClass instant = new SomeClass();
instant.x = 1;
instant.SomeMetod(3);

Как сделать то же самое в терминах языка Си? Указатель ведь может ссылаться на что угодно в памяти.

struct SomeClass *instant = malloc(sizeof(*instant));
SomeClass_Constructor(instant);
instant->x = 1;
SomeClass_SomeMethod(instant, 3);
  • Наследование -> добавление структуры предка первым элементом новой структуры;
  • виртуальные функции -> указатели на функции.

Но как уже написали выше, тебе нужно будет написать свою обёртку для этого. Или попробовать найти какой-нибудь готовый генератор обёрток.