★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★
Сайт Димарика
Последнее обновление: Май 2026
★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★ ✦ ★
НАВИГАЦИЯ
> Главная
> 🔥 Лента приколов
> 📰 Новости
> 📔 Блог
> 🎙 Подкасты
> 📖 Гостевая
> Написать мне
ПОДПИСКА
RSS Подписаться на блог
СТАТИСТИКА
*** HIT COUNTER ***
004513
TOTAL VISITORS
Сегодня: 3
Онлайн: 1
Рекорд дня: 202
(14.05.2026)

ПОГОДА
КОТИРОВКИ
сегодня завтра
USD ЦБ 72,7479 +0,0000 72,7479
EUR ЦБ 84,3439 +0,0000 84,3439
ЦБ РФ на 18.06.2026
ГлавнаяБлог → c

📔 Блог Димарика / c [× сбросить]
Абстракции и наследование в Си - стреляем по ногам красиво
Опубликовано: 15.06.2022 12:00 #Dev #c #oop #упрлс

TL;DR https://github.com/ddoroshev/c-inheritance

Иногда нет-нет да и хочется что-нибудь абстрагировать и обобщить в коде на Си. К примеру, хочешь ты принтануть содержимое структуры несколько раз, пишешь везде, как дурак, printf("%s %d %f\n", foo->bar, foo->baz, foo->boom), и интуитивно кажется, что есть способ сделать foo->print(foo), и так вообще со всеми структурами, не только с foo.

Возьмем пример: есть некий чувак с именем и фамилией, и есть птица, у которой есть имя и владелец.

typedef struct Person Person;
struct Person {
    char *first_name;
    char *last_name;
};

typedef struct Bird Bird;
struct Bird {
    char *name;
    Person *owner;
};

Чтобы вывести информацию про этих животных, кондовый сишник напишет просто две функции:

void Person_Print(Person *p) {
    printf("%s %s\n", p->first_name, p->last_name);
}

void Bird_Print(Bird *b) {
    printf("%s of %s %s\n", b->name, b->owner->first_name, b->owner->last_name);
}

И будет таки прав! Но что если подобных структур у нас много, а наш мозг испорчен веяниями ООП?

[ читать дальше » ]


СЛУЧАЙНАЯ ЦИТАТА
Повесил свой сюртук на cron...

[ Новая цитата ]
ДРУЗЬЯ
kk.consulting kk.consulting
пиши на webmaster@dimarik.com,
если хочешь присоединиться
СТАТУС СЕРВЕРА
$ uptime
вычисляем...
$ git log --oneline -1
9c520e6 'Serve /misc from persistent server dir'
ЛУЧШЕ СМОТРИТСЯ В
Internet Explorer Firefox

PROUDLY MADE WITH
OpenAI Claude Code
Python Django