Введение в тему наследования 0:04 Переход к следующей теме, которая называется "Наследование". Тема будет состоять из шести или семи пунктов. Создание нового файла для работы с темой.
Основные принципы программирования 1:16 Три основных принципа программирования: инкапсуляция, наследование и полиморфизм. Обсуждение инкапсуляции, теперь переходим к наследованию.
Идея наследования 1:44 Наследование позволяет создавать типы, которые являются подтипами других типов. Можно построить иерархию типов, где один тип обладает всеми свойствами другого типа и дополнительными свойствами. Наследование поддерживается многими объектно-ориентированными языками, включая C++, Java, Python и другие.
Публичное, приватное и защищенное наследование 3:22 Пункт 4.1 будет посвящен публичному, приватному и защищенному наследованию.
Введение в наследование 3:40 Базовый класс Base и производный класс Derive. Базовый класс содержит поле и функцию. Функция выводит слово "Base".
Публичное наследование 4:32 Объявление класса Derive с использованием двоеточия. Варианты наследования: public, private, protected. Публичное наследование позволяет использовать все методы и поля базового класса.
Пример использования публичного наследования 5:15 Объявление полей и методов в Derive. Создание объекта Derive и вызов методов базового класса. Проверка доступа к полям базового класса.
Различие между public и private 7:11 Public наследование делает класс Derive публичным случаем базового класса. Private наследование делает класс Derive приватным случаем базового класса. Доступ к приватным полям возможен только из тела класса или через друзей.
Доступ к приватным полям 10:16 Приватные поля доступны только членам класса и друзьям. Объявление функции как друга класса позволяет обращаться к приватным полям. Приватность на уровне класса, а не базового класса.
Protected наследование 15:03 Protected наследование делает поля доступными для методов и друзей класса, а также для наследников. Protected поля доступны только через методы и друзей класса. Protected поля не доступны из основного класса.
Пример использования protected 17:01 Объявление поля как protected в базовом классе. Доступ к protected полю из класса Derive. Доступ к protected полю из основного класса возможен через друзей.
Дружба и наследование 20:24 Обсуждение дружбы и её роли в наследовании. Дружба помогает при обращении к полям и методам родителя. Рекомендация использовать дружбу редко, только для понимания теории.
Виды наследования 21:47 Наследование бывает правило, паблик и протектор. Протектор наследования позволяет только друзьям и наследникам обращаться к базовым полям. Пример с методом, который выводит поле родителя.
Правила доступа 23:56 Доступ к полям и методам определяется по минимальному уровню доступа. Если на любом этапе доступа отказано, доступ к полю или методу невозможен. Пример с иерархией наследования и доступом к полям.
Публичные и защищенные поля 27:15 Публичные поля доступны всем, защищенные - только друзьям и наследникам. Пример с функцией, принимающей объект типа бейс. Доступ к защищенным полям возможен только для объектов типа бейс.
Компилятор и доступ 29:15 Разграничение доступа проверяется компилятором. В Python нет концепции правила и паблик, так как нет компилятора. В C++ это механизм защиты от случайного доступа к защищенным полям.
Тест и видимость 32:55 Следующий пункт лекции - тест видимости и доступности. Отличие наследования классов от структур: у структур по умолчанию публичное, у классов - приватное. Наследование у классов приватное по умолчанию, у структур - публичное.
Видимость и доступность 34:16 Видимость и доступность - разные концепции. Переменная может быть невидимой, но доступной. Пример с бабушкой, мамой и сыном для демонстрации.
Переопределение методов 35:14 Объявление полей и методов с одинаковыми именами. Переопределение метода в дочернем классе. Предпочтение более локального метода.
Явное использование версии из предка 37:44 Возможность явного использования версии из предка. Пример с сыном и мамой. Явное указание на использование версии из мамы.
Видимость и доступность полей 39:42 Поле в сыне затмевает поле в маме. Возможность обращения к полю в сыне. Проверка доступности после выбора версии.
Проверка доступности 41:32 Проверка доступности после выбора версии. Пример с полем и методом. Видимость и доступность как отдельные шаги.
Перегрузка и выбор версии 44:52 Пример с функцией от инт и дабл. Компилятор выбирает версию до разрешения перегрузки. Версия в сыне затмевает версию в маме.
Заключение 47:21 Версия в сыне делает версию в маме невидимой. Пример с функцией от стд стринг. Версия в сыне выигрывает перегрузку.
Образование страдательных причастий 47:30 Обсуждение образования страдательных причастий от слова "затмить". Пример с использованием "дабл" и "эф". Объяснение, почему "дабл" не подходит для образования страдательных причастий.
Использование "юзинг" 48:13 Объяснение, как "юзинг" добавляет в область видимости все версии функций из родительского класса. Пример использования "юзинг" для выбора правильной версии функции. Демонстрация, как "юзинг" позволяет участвовать в перегрузке функциям из родительского класса.
Проверка доступности функций 50:01 Объяснение, что приватные функции не могут быть использованы через "юзинг". Пример, почему "юзинг" не работает с приватными функциями. Уточнение, что "юзинг" делает функции доступными извне, но не меняет их приватность.
Синтаксические ошибки при использовании "юзинг" 52:11 Объяснение, что нельзя писать "юзинг тип" в классе. Пример, как можно писать "юзинг мам" для доступа к полям. Объяснение, почему конфликт имен возникает при использовании одинаковых имен в разных классах.
Использование "юзинг" конструкторов 54:45 Объяснение, что начиная с C++11 можно использовать "юзинг" конструкторов. Пример, как это позволяет создавать объекты типа "сын" от тех же типов, что и родительский класс. Пример использования "юзинг" конструкторов для инициализации полей.
Заключение 56:50 Проверка, что все важные моменты были обсуждены. Завершение обсуждения и прощание с аудиторией.