JavaRush
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема

Лекции

  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Мое обучение
  • Курсы
  • Университет
  • Карта квестов
  • Лекции
  • Pure virtual (= 0) и абстрактные классы

    C++ SELF
    52 уровень,0 лекция
    Разбираем, как в C++ работает абстрактный тип через pure virtual-методы: что означает синтаксис = 0, почему абстрактный класс нельзя создать напрямую, как правильно реализовывать «интерфейс» через override и зачем полиморфной базе нужен виртуальный деструктор. Практика — на мини-примере Tasky с разными стратегиями печати задач.
    Открыта
  • Контракт интерфейса

    C++ SELF
    52 уровень,1 лекция
    Разбираем, зачем интерфейсу нужен «договор» (предусловия и постусловия), почему «тонкий» интерфейс проще реализовывать и тестировать, как фиксировать контракт прямо в сигнатуре через const, std::string_view, std::optional и [[nodiscard]], как честно описывать неуспех без исключений, а также как инварианты состояния влияют на поведение. В конце — практический пример для TaskBoard и разбор типичных ошибок проектирования.
    Открыта
  • Владение через абстракцию — std::unique_ptr<IService>

    C++ SELF
    52 уровень,2 лекция
    Разбираем практический паттерн «владение через абстракцию»: как хранить сервис по интерфейсу в виде std::unique_ptr < ILogger >, зачем нужен virtual-деструктор для полиморфного удаления, как работает перемещение через std::move, что означает «пустой указатель» ( nullptr), и как это применять в мини-приложении TaskApp с реализациями ConsoleLogger/ NullLogger, включая коллекции std::vector < std::unique_ptr < IService >>.
    Открыта
  • Фабрика реализаций по конфигу/CLI

    C++ SELF
    52 уровень,3 лекция
    Разбираем, как централизовать выбор реализации по настройкам (конфиг/CLI) с помощью фабрики: отделяем «грязный» ввод строк от типобезопасного enum class, парсим режим в StorageKind, а затем создаём конкретное хранилище через make_storage, возвращая std::unique_ptr<ITaskStorage>. На примере TaskTracker сравним реализации на std::vector и std::map, обсудим архитектурные нюансы и типичные ошибки.
    Открыта
  • RTTI как крайний инструмент

    C++ SELF
    52 уровень,4 лекция
    Разбираем RTTI в C++ как «огнетушитель» для редких случаев: чем отличаются статический и динамический тип, как работает безопасное приведение через dynamic_cast (с проверкой на nullptr и требованием полиморфной базы с virtual-методом), когда уместен typeid и почему std::type_info:: name() нельзя использовать как стабильный идентификатор. На примере ITaskStorage показываем, как заменить RTTI «нормальным» полиморфизмом через виртуальный метод debug_describe( std::ostream&).
    Открыта
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush