JavaRush
AI Academy
new
Акція
Університет
Java FullStack
Python FullStack
AI Native Developer
new
Навчання
Курси
Задачі
Опитування
Ігри
Допомога
Графік стусанів
Стажування
Спільнота
Користувачі
Форум
Чат
Статті
Історії успіху
Дії
Відгуки
Передплати
Світла тема

Лекції

  • Відгуки
  • Про нас
  • CS50
Почати
Почати навчання
Почати навчання
  • Моє навчання
  • Курси
  • Університет
  • Карта квестів
  • Лекції
  • virtual/override — динамічний поліморфізм

    C++ SELF
    51 рівень, 0 лекція
    Розбираємо динамічний поліморфізм у C++: навіщо базовому класу потрібні virtual-методи, як працює «віртуальний виклик» через Base &/ Base *, чим статичний тип відрізняється від реального, і чому override захищає від сигнатури, яка «майже збігається». Наприкінці — практичний приклад із діями ( Action) та розбір типових помилок.
    Відкрита
  • Object slicing — чому Base b = Derived{} ламає поліморфізм

    C++ SELF
    51 рівень, 1 лекція
    Розберемо, що таке object slicing у C++: чому конструкція «обʼєкт базового типу за значенням» ( Base ← Derived) «зрізає» нащадка й вимикає віртуальні виклики; де slicing ховається в параметрах і контейнерах, наприклад у std::vector<Base>; і як правильно проєктувати інтерфейси та організовувати зберігання через const Base & та std::unique_ptr.
    Відкрита
  • Віртуальний деструктор

    C++ SELF
    51 рівень, 2 лекція
    Розбираємо, чому деструктор — частина контракту класу і що відбувається, коли обʼєкт знищують через базовий вказівник або механізм володіння: delete через Base* і std::unique_ptr<Base> мають запускати правильний ланцюжок руйнування. Показуємо небезпечний випадок без virtual деструктора, формулюємо правило virtual ~Base() = default, додаємо діаграму вибору й розбираємо типові помилки та корисну дисципліну override.
    Відкрита
  • final і заборона наслідування — коли це корисно

    C++ SELF
    51 рівень, 3 лекція
    Розбираємо, навіщо в C++ використовувати final для класів і віртуальних методів: як заборона наслідування захищає інваріанти, чому поєднання override final фіксує контракт, як проєктувати ієрархії за принципом «база розширювана, а листя — final» і чому final не скасовує потреби у virtual-деструкторі, якщо обʼєктом володіють через std::unique_ptr< Command>. Наприкінці — типові помилки й практичний приклад CLI-команд.
    Відкрита
  • Ціна поліморфізму

    C++ SELF
    51 рівень, 4 лекція
    Розбираємо «ціну» динамічного поліморфізму в C++: чим віртуальний виклик через Base&/ Base* відрізняється від звичайного, чому разом із virtual майже неминуче постають питання володіння й часу життя (наприклад, std::unique_ptr), як базовий контракт повʼязує код, здорожчує супровід і коли поліморфізм справді виправданий. Наприкінці порівняємо альтернативи: enum class + switch, передавання поведінки лямбдою через std::function і закриті набори типів через std::variant.
    Відкрита
Навчання
  • Курси програмування
  • Реєстрація
  • Курс Java
  • Допомога із задачами
  • Ціни
Спільнота
  • Користувачі
  • Статті
  • Форум
  • Чат
  • Історії успіху
  • Дії
Компанія
  • Про нас
  • Контакти
  • Відгуки
  • FAQ
  • Підтримка
JavaRush JavaRush — це інтерактивний онлайн-курс вивчення Java-програмування з нуля. Він містить 1200 практичних задач із перевіркою розв'язання одним клацанням, необхідний мінімум знань із теоретичних основ Java, а ще мотивувальні «фішки», які допоможуть пройти курс до кінця: ігри, опитування, цікаві проєкти й статті про ефективне навчання та кар'єру Java‑девелопера.
Підписуйтесь
Мова інтерфейсу
Русский English
Українська
Програмістами не народжуються © 2026 JavaRush
MastercardVisa
Програмістами не народжуються © 2026 JavaRush