Презентация - Константность. Конструктор копирования. Класс массива. ООП

Нажмите для просмотра
Константность. Конструктор копирования. Класс массива. ООП
Распечатать
  • Последний IP: 114.119.147.150
  • Уникальность: 90%
  • Слайдов: 46
  • Просмотров: 2204
  • Скачиваний: 1360
  • Размер: 6.03 MB
  • Онлайн: Да
  • Формат: ppt и pptx
В закладки
Оцени!

Слайды и текст этой онлайн презентации

Слайд 1

Константность. Конструктор копирования. Класс массива. ООП, слайд 1
Программирование Лекция 5. Константность. Конструктор копирования. Класс массива. ООП

Слайд 2

Константность. Конструктор копирования. Класс массива. ООП, слайд 2
Константные методы Ключевое слово const можно использовать для нотации методов классов, которые не изменяют полей объектов. Класс целочисленного массива Метод возвращает размер массива, не изменяя полей класса Если в таком методе менять поля класса, то будет ошибка. resize не является константным методом

Слайд 3

Константность. Конструктор копирования. Класс массива. ООП, слайд 3
Ключевое слово mutable Иногда возникает необходимость менять поля класса внутри константных методов Например, необходимо посчитать, сколько раз вызывается метод у определенного экземпляра класса Ключевым словом mutable нужно определять только те поля, которые не являются частью состояния объекта. Поле counter никак не влияет на значение массива

Слайд 4

Константность. Конструктор копирования. Класс массива. ООП, слайд 4
Копирование объектов 10 1 2 3 20 4 5 6 10 10 x При выходе из функции произойдет вызов деструкторов: a3 (освобождение памяти динамического массива 1,2,3, ), a2 (попытка освободить память – ошибка), a1. Кроме того, утечка памяти – массив 4,5,6, остался висеть в памяти.

Слайд 5

Константность. Конструктор копирования. Класс массива. ООП, слайд 5
Конструктор копирования Константная ссылка на объект того же типа Копируем поле size Указатель на новый массив Копируем значения массива Конструктор копирования вызывается в тех случаях, когда при копировании создается новый объект, н-р, при передаче объекта в функцию по значению.

Слайд 6

Константность. Конструктор копирования. Класс массива. ООП, слайд 6
Оператор присваивания Когда копирование происходит в уже существующий объект , вызывается оператор присваивания. Ссылка на зн-е текущего объекта Разыменовываем, т.о. получаем, ссылку Сначала удаляем данные, к-рые уже есть в объекте Выделяем новый дин.массив Проверка, не присваиваем ли зн-е самого себя

Слайд 7

Константность. Конструктор копирования. Класс массива. ООП, слайд 7
Метод swap Реализацию оператора присваивания можно упростить методом swap Ссылка на объект того же типа Обмениваем зн-я поля size Обмениваем зн-я поля data После вызова метода swap, данные массивов обменяются местами

Слайд 8

Константность. Конструктор копирования. Класс массива. ООП, слайд 8
Метод swap Реализацию метода swap можно упростить за счет использования библиотечной функции swap. Переставляет местами 2 зн-я

Слайд 9

Константность. Конструктор копирования. Класс массива. ООП, слайд 9
Реализация оператора при помощи swap Используя конструктор копирования и метод swap, можно реализовать оператор присваивания. Конструктор копирования Оператор присваивания Int Array t(a) t.swap( this) Временное зн-е t будет уничтожено

Слайд 10

Константность. Конструктор копирования. Класс массива. ООП, слайд 10
Запрет копирования объектов Иногда необходимо запретить копирование объектов Конструктор копирования Произойдет ошибка компиляции при копировании или присваивании переменной данного типа

Слайд 11

Константность. Конструктор копирования. Класс массива. ООП, слайд 11
Методы, генерируемые компилятором

Слайд 12

Константность. Конструктор копирования. Класс массива. ООП, слайд 12
Поля и конструкторы Обобщим знания о классе для массива. 2 поля Запрет неявного преобразования Инициализация элементов нулями Конструктор копирования Обязательно нужен 1 аргумент

Слайд 13

Константность. Конструктор копирования. Класс массива. ООП, слайд 13
Деструктор, оператор присваивания и swap Удаляем динамический массив Библиотечная функция swap из стандартной библиотеки

Слайд 14

Константность. Конструктор копирования. Класс массива. ООП, слайд 14
Наследование Класс, описывающий человека «геттеры» Класс Student является производным класса Person Класс Student будет иметь также все поля и методы класса Person

Слайд 15

Константность. Конструктор копирования. Класс массива. ООП, слайд 15
Класс-наследник Вначале объекта типа Student хранится экземпляр класса Person

Слайд 16

Константность. Конструктор копирования. Класс массива. ООП, слайд 16
Создание/удаление объекта производного класса Конструктор от 2х параметров При создании производного класса нужно вызвать конструктор родителя

Слайд 17

Константность. Конструктор копирования. Класс массива. ООП, слайд 17
Приведения Производные классы связаны со своими базовыми (или родительскими) классами при помощи приведений. Создаем ссылку и указатель базового класса на производный тип Скопированы соответствующие поля

Слайд 18

Константность. Конструктор копирования. Класс массива. ООП, слайд 18
Модификатор доступа protected (к полям и методам)

Слайд 19

Константность. Конструктор копирования. Класс массива. ООП, слайд 19
Для того, чтобы продолжить изучать наследование и говорить о переопределении методов, вспомним, что такое перегрузка. Перегрузка – это возможность определить несколько функций с одним и тем же именем, но различными типами параметров. Компилятор будет выбирать наиболее подходящую. Перегрузка функций Возвращ.зн-е будет преобразовано Не double и не int

Слайд 20

Константность. Конструктор копирования. Класс массива. ООП, слайд 20
Перегрузка методов Аналогично перегрузке функций, в С существует перегрузка методов. Класс, описывающий вектор на пл-ти Умн-е вектора на число Умн-е вектора на вектор (скалярное) Определяем вектор Умн-е на число Умн-е p на q

Слайд 21

Константность. Конструктор копирования. Класс массива. ООП, слайд 21
Перегрузка при наследовании Класс для работы с файлами Метод для записи строки в файл Производный класс Объявлены перегрузки – методы для записи целых и вещест. чисел Данные методы «перекрывают» методы базового класса Данная строка позволяет исп-ть метод из базового класса Не скомпилируется, если нет using File::write

Слайд 22

Константность. Конструктор копирования. Класс массива. ООП, слайд 22
Правила перегрузки Как компилятор выбирает правильную функцию при перегрузке? Н-р, double в int Иначе – ошибка – вызов неоднозначен, т.е. неск-ко функций одинаково подходят (не на этапе выполнения) лат. Nota bene «обрати внимание»

Слайд 23

Константность. Конструктор копирования. Класс массива. ООП, слайд 23
Задача

Слайд 24

Константность. Конструктор копирования. Класс массива. ООП, слайд 24
Задача 2

Слайд 25

Константность. Конструктор копирования. Класс массива. ООП, слайд 25
Задача 3

Слайд 26

Константность. Конструктор копирования. Класс массива. ООП, слайд 26
Переопределение методов (overriding) Перегрузка – определение функции с тем же именем, но другой сигнатурой. Переопределение – определение метода с тем же именем и сигнатурой, как у базового класса. Базовый класс Метод из базового класса

Слайд 27

Константность. Конструктор копирования. Класс массива. ООП, слайд 27
Виртуальные методы Тогда при вызове метода через указатель на базовый класс, какой метод будет вызван, будет зависеть не от типа указателя, а от объекта, на к-рый он ссылается

Слайд 28

Константность. Конструктор копирования. Класс массива. ООП, слайд 28
Чистые виртуальные (абстрактные) методы Особый вид виртуальных методов – чистые вирт. методы. Это виртуальные методы, у к-рых отсутствует реализация. Нет реализации Сам класс становится абстрактным, т.е. нельзя создать экземпляр класса Но можно создавать производные класса Но можно создавать указатели на Student или Professor Будет вызвана соответствующая реализация, основываясь на типе

Слайд 29

Константность. Конструктор копирования. Класс массива. ООП, слайд 29
продолжение

Слайд 30

Константность. Конструктор копирования. Класс массива. ООП, слайд 30
Виртуальный деструктор Название университета Деструктор класса Person, то есть поле uni останется висеть в памяти

Слайд 31

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

Слайд 32

Константность. Конструктор копирования. Класс массива. ООП, слайд 32
Полиморфизм Первый механизм полиморфизма Второй механизм полиморфизма

Слайд 33

Константность. Конструктор копирования. Класс массива. ООП, слайд 33
Ещё раз об ООП Это экземпляры класса Объединение логически связанных данных с методами работы с этими данными Возможность создавать производные класса Работа с подклассами через ссылку на базовый класс Возможность сокрыть реализацию класса при помощи модификаторов доступа

Слайд 34

Константность. Конструктор копирования. Класс массива. ООП, слайд 34
Как правильно построить иерархию? Базовый абстрактный класс

Слайд 35

Константность. Конструктор копирования. Класс массива. ООП, слайд 35
Как правильно построить иерархию? Функция получает прямоугольник по ссылке и увеличивает его ширину в 2 раза Но если в эту функцию передадим квадрат, то будет некорректная работа программы

Слайд 36

Константность. Конструктор копирования. Класс массива. ООП, слайд 36
Как правильно построить иерархию? Расширили класс квадрата, добавив еще 1 поле Метод вычисляет площадь Метод будет работать некорректно для прямоугольника

Слайд 37

Константность. Конструктор копирования. Класс массива. ООП, слайд 37
Как правильно построить иерархию? Но в некоторых частных случаях, квадрат можно унаследовать от прямоугольника и наоборот, в зависимости от того, какие методы и функции понадобятся для работой с этими классами.

Слайд 38

Константность. Конструктор копирования. Класс массива. ООП, слайд 38
Агрегирование vs наследование Иногда вместо наследования используют агрегирование. Н-р, класс компьютер (содержит клавиатуру, мышь и т.д.) Тогда класс комп-р агрегирует в себя объекты классов клавиатуры, мыши и т.д. Чем меньше зависимость, тем меньше нужно менять при изменении компонентов. Рас-е м/у 2 двумя точками Транспонирование матриц не имеет смыла для системы линейных уравнений

Слайд 39

Константность. Конструктор копирования. Класс массива. ООП, слайд 39
Принцип подстановки Барбары Лисков

Слайд 40

Константность. Конструктор копирования. Класс массива. ООП, слайд 40
Модификаторы при наследовании B1 может вызывать все методы класса А Только внутри класса B2 можно вызывать методы класса А protected private, только методы будут доступны также в производных класса В3

Слайд 41

Константность. Конструктор копирования. Класс массива. ООП, слайд 41
Переопределение private виртуальных методов // сетевое устройство Публичный метод send – нельзя переопределить у наследников Виртуальный метод можно переопределить Это шаблон template method

Слайд 42

Константность. Конструктор копирования. Класс массива. ООП, слайд 42
Интерфейсы Отсутствует реализация Только у деструктора должна быть реализация Создаем копию человека

Слайд 43

Константность. Конструктор копирования. Класс массива. ООП, слайд 43
Множественное наследование Базовые классы через запятую (будет 2 экземпляра Person) Использование интерфейсов позволит избежать дублирования данных и неоднозначности

Слайд 44

Константность. Конструктор копирования. Класс массива. ООП, слайд 44
Вопросы Что такое константный метод? Для чего применяется ключевое слово mutable? Перечислите методы, генерируемые компилятором. Что такое наследование? Приведите пример наследования на С

Слайд 45

Константность. Конструктор копирования. Класс массива. ООП, слайд 45
Задача на закрепление материала по модификатору const Объявите переменную c именем m , в которой хранится указатель на двумерный массив целых чисел (int), выделенный в динамической памяти, так чтобы содержимое массива нельзя было поменять, т. е. компилятор должен выдавать ошибку при попытке произвести над m любое действие, которое изменит значение m i j для любых i и j . Требования к выполнению задания: в задании требуется только объявить переменную, инициализировать ее не нужно. Например, объявление может выглядеть так: int m;

Слайд 46

Константность. Конструктор копирования. Класс массива. ООП, слайд 46
Ответ int const const m;
^ Наверх
X

Благодарим за оценку!

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