Библиотека C/C++ разработчика | cpp, boost, qt
19.6K subscribers
1.96K photos
60 videos
16 files
4.21K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
Что не так с public virtual?

Вы добавляете логирование в базовый класс, а оно не срабатывает? Добро пожаловать в мир публичных виртуальных функций.

Проблема: Когда виртуальная функция публична, производные классы могут обойти любую логику базового класса:

//  Классический антипаттерн
class Base {
public:
virtual void process(Data& data) {
log("Processing...");
// Логика
}
};

class Derived : public Base {
public:
void process(Data& data) override {
// Производный класс забыл вызвать Base::process()
// Логирование пропало!
}
};



💡Паттерн NVI решает это:

NVI (Non-Virtual Interface) — паттерн, где публичные методы невиртуальные, а виртуальные — приватные. Базовый класс становится "шлюзом", контролирующим доступ к кастомизируемой логике.

class IProcessor {
public:
void process(Data& data) { // Невиртуальный public
validate(data); // Общая логика
logStart(); // Тоже общая
process(data); // Кастомизация
logEnd();
}

private:
virtual void process(Data& data) = 0; // Виртуальный private
void validate(Data& data) { /* ... */ }
void logStart() { /* ... */ }
void logEnd() { /* ... */ }
};


Теперь каждый вызов process() гарантированно проходит через логирование. Производные классы физически не могут его обойти.


🔹Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹Сайт Proglib

Библиотека C/C++ разработчика

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🌚2👾1
Плюсовики, собираемся 15 декабря в Москве и онлайн на встречу РГ21 С++

Ивент для практикующих C++-разработчиков и энтузиастов, которые хотят понимать, куда движется язык, и участвовать в его развитии.

Антон Полухин (Техплатформа Городских сервисов Яндекса) поделится новостями со встречи международного Комитета по стандартизации языка C++ — о прогрессе в работе над С++26, новинках и о том, какие комментарии к стандарту подготовила Россия.

На встрече вы узнаете, как именно российским разработчикам участвовать в развитии стандарта языка, сможете задать свои вопросы спикеру и обменяться мнениями с коллегами.

Подробности и регистрация
😁2
🐸 Подборка вакансий для C++-разработчиков за неделю

Разработчик C++ / Rust (SDN dataplane, DPDK/DOCA API) — Удалёнка

Разработчик С++ (Middle) — от 180 000 и до 400 000 ₽ Гибрид (Москва)

Инженер-разработчик (C/C++/Qt/Embedded) — от 130 000 и до 250 000₽ Гибрид (Санкт-Петербург)

C++ Engineer в компиляторах — от 300 000 ₽ Офис (Новосибирск)

Разработчик C++ — Удалёнка

Библиотека C/C++ разработчика
😁1