Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Программирование – 1 курс весна 2022 – 7 занятие

Программирование – 1 курс весна 2022 – 7 занятие

ТиМПИ

April 05, 2022
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. 2/28 2/28 Оператор преобразования в стиле C Довольно простая система

    типов: • Числовые типы • Указатели • Структуры • Классов нет
  2. 3/28 3/28 Преобразования в стиле C++: static_cast Система типов более

    сложная, поэтому сделали несколько операторов преобразования static_cast служит для: • Стандартных (неявных) преобразований. • Преобразования числовых типов • Указатель на производный класс в указатель/ссылку на базовый класс • T* в void* • Явное (пользовательское) приведение типа: Person p = static_cast<Person>("Ivan"); (так можно делать, если есть соответствующий конструктор) • Обратные варианты стандартных преобразований: • Указатель/ссылка на базовый класс в указатель/ссылку на производный класс (преобразование вниз/downcast), • void* в любой T*
  3. 4/28 4/28 Преобразования в стиле C++: cost_cast Служит для снятия/добавления

    константности Добавление константности используется редко, так как это неявное преобразование. Обычно это плохо, но бывают исключения
  4. 5/28 5/28 Преобразования в стиле C++: reinterpret_cast Преобразовывать указателей и

    ссылок на несвязанные типы Зачем? Работаем на низком уровне, важно представление данных
  5. 6/28 6/28 Сравним преобразования в С и С++ Преобразование в

    стиле C может заменить любое из рассмотренных ранее преобразований, но менее безопасно!
  6. 7/28 7/28 Расположение объекта в памяти 1/3 height weigth tailLength

    Объект базового класса Animal Поля самого объекта Cat
  7. 8/28 8/28 Расположение объекта в памяти 2/3 height weigth tailLength

    Свойства Animal Свойства Cat height weigth tailLength Свойства Animal Свойства Cat
  8. 9/28 9/28 Расположение объекта в памяти 3/3 height weigth ???

    Свойства Animal height weigth Свойства Animal
  9. 11/28 11/28 Организация памяти при множественном наследовании 2/5 height weigth

    tailLength Свойства Animal Свойства Cat houseNumber Свойства Home
  10. 12/28 12/28 Организация памяти при множественном наследовании 3/5 height weigth

    tailLength Свойства Animal Свойства Cat houseNumber Свойства Home height weigth tailLength Свойства Animal Свойства Cat houseNumber Свойства Home
  11. 20/28 20/28 Вспомним виртуальные методы Виртуальный метод в языке С++

    — это особый тип функции, которая, при её вызове, выполняет «наиболее» дочерний метод, который существует между родительским и дочерними классами. • Если функция отмечена как виртуальная, то все соответствующие переопределения тоже считаются виртуальными. • Сигнатура виртуального метода дочернего класса должна полностью соответствовать сигнатуре виртуального метода родительского класса, иначе это просто другой метод. • Никогда не вызывайте виртуальные функции в теле конструкторов или деструкторов. • Обработка и выполнение вызова виртуального метода занимает больше времени, чем обработка и выполнение вызова обычного метода.
  12. 21/28 21/28 Таблица виртуальных методов 1/3 • Через неё реализуется

    динамический полиморфизм • Таблица ВМ создаётся для каждого полиморфного класса (не объекта) • Объекты полиморфных классов содержат указатель на таблицу виртуальных методов соответствующего класса Поле неявное, стандартными методами не получить его значение. Вызов виртуального метода – это вызов метода по адресу из таблицы. height weigth tailLength Свойства Animal Свойства Cat houseNumber Свойства Home Виртуальный метод Его адрес 0 ~Animal() 0xaba8
  13. 23/28 23/28 Таблица виртуальных методов 3/3 height weigth tailLength Свойства

    Animal Свойства Cat houseNumber Свойства Home Виртуальный метод Его адрес 0 ~Animal() 0xaba8 1 ~getAddress() ТВМ1 Виртуальный метод Его адрес 0 ~getAddress() 0xaba8 ТВМ2
  14. 24/28 24/28 Рекомендации Основные ошибки при использовании ООП: унаследовать всё

    от всего Ещё примеры: 1. Отнаследовать класс Circle on Point. 2. Класс LinearSystem от Matrix. Круг Прямоугольник Форма Треуго льник
  15. 25/28 25/28 Принцип подстановки Барбары Лисков Принцип подстановки Барбары Лисков:

    «Если есть функция, работающая с базовым классом, то она должна иметь возможность работать с производным классом, не зная об этом»
  16. 26/28 26/28 Resource Acquisition Is Initialization Resource Acquisition Is Initialization

    (RAII) Получение ресурса есть инициализация Это программная идиома ООП, которая заключается в том, что с помощью конструктора и деструктора получение некоторого ресурса неразрывно совмещается с инициализацией, а освобождение — с уничтожением объекта. Следует контролировать возможность создания объекта через операцию клонирования и корректно переопределить (или запретить) операцию присваивания для подобных объектов.
  17. 27/28 27/28 Источники Основные источники: • Курсы "Программирование на языке

    C++", "Программирование на языке C++ (продолжение)". Лектор А.В. Смаль. https://stepik.org/course/7/info, https://stepik.org/course/3206/info • Курс "Программирование на C++, часть 1 (осень 2018)". Лектор В.М. Лесин. https://www.youtube.com/playlist?list=PLlb7e2G7aSpTFea2FYxp7m FfbZW-xavhL