Разделы презентаций


Программирование

Содержание

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

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

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

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

Слайд 2Константные методы
Ключевое слово const можно использовать для нотации методов классов,

которые не изменяют полей объектов.
Класс целочисленного массива
Метод возвращает размер массива,

не изменяя полей класса

Если в таком методе менять поля класса, то будет ошибка.

resize не является константным методом

Константные методыКлючевое слово const можно использовать для нотации методов классов, которые не изменяют полей объектов.Класс целочисленного массиваМетод

Слайд 3Ключевое слово mutable
Иногда возникает необходимость менять поля класса внутри константных

методов
Например, необходимо посчитать, сколько раз вызывается метод у определенного экземпляра

класса

Ключевым словом mutable нужно определять только те поля, которые не являются частью состояния объекта.

Поле counter никак не влияет на значение массива

Ключевое слово mutableИногда возникает необходимость менять поля класса внутри константных методовНапример, необходимо посчитать, сколько раз вызывается метод

Слайд 4Копирование объектов
10 \
x
При выходе из функции произойдет вызов деструкторов: a3

(освобождение памяти динамического массива [1,2,3,…]), a2 (попытка освободить память –

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

Слайд 5Конструктор копирования
Константная ссылка на объект того же типа
Копируем поле size
Указатель

на новый массив
Копируем значения массива
Конструктор копирования вызывается в тех случаях,

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

Слайд 6Оператор присваивания
Когда копирование происходит в уже существующий объект, вызывается оператор

присваивания.
Ссылка на зн-е текущего объекта
Разыменовываем, т.о. получаем, ссылку
Сначала удаляем данные,

к-рые уже есть в объекте

Выделяем новый дин.массив

Проверка, не присваиваем ли зн-е самого себя

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

Слайд 7Метод swap
Реализацию оператора присваивания можно упростить методом swap
Ссылка на объект

того же типа
Обмениваем зн-я поля size
Обмениваем зн-я поля data
После вызова

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

Слайд 8Метод swap
Реализацию метода swap можно упростить за счет использования библиотечной

функции swap.
Переставляет местами 2 зн-я

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

Слайд 9Реализация оператора = при помощи swap
Используя конструктор копирования и метод

swap, можно реализовать оператор присваивания.
Конструктор копирования
Оператор присваивания
IntArray t(a)
t.swap(*this)
Временное зн-е t

будет уничтожено
Реализация оператора = при помощи swapИспользуя конструктор копирования и метод swap, можно реализовать оператор присваивания.Конструктор копированияОператор присваиванияIntArray

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

при копировании или присваивании переменной данного типа

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

Слайд 11Методы, генерируемые компилятором

Методы, генерируемые компилятором

Слайд 12Поля и конструкторы
Обобщим знания о классе для массива.
2 поля
Запрет неявного

преобразования
Инициализация элементов нулями
Конструктор копирования
Обязательно нужен 1 аргумент

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

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

стандартной библиотеки

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

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

иметь также все поля и методы класса Person

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

Слайд 15Класс-наследник
Вначале объекта типа Student хранится экземпляр класса Person

Класс-наследникВначале объекта типа Student хранится экземпляр класса Person

Слайд 16Создание/удаление объекта производного класса
Конструктор от 2х параметров
При создании производного класса

нужно вызвать конструктор родителя

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

Слайд 17Приведения
Производные классы связаны со своими базовыми (или родительскими) классами при

помощи приведений.
Создаем ссылку и указатель базового класса на производный тип
Скопированы

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

Слайд 18Модификатор доступа protected
(к полям и методам)

Модификатор доступа protected(к полям и методам)

Слайд 19Для того, чтобы продолжить изучать наследование и говорить о переопределении

методов, вспомним, что такое перегрузка.
Перегрузка – это возможность определить несколько

функций с одним и тем же именем, но различными типами параметров. Компилятор будет выбирать наиболее подходящую.

Перегрузка функций

Возвращ.зн-е будет преобразовано

Не double и не int

Для того, чтобы продолжить изучать наследование и говорить о переопределении методов, вспомним, что такое перегрузка.Перегрузка – это

Слайд 20Перегрузка методов
Аналогично перегрузке функций, в С++ существует перегрузка методов.
Класс, описывающий

вектор на пл-ти
Умн-е вектора на число
Умн-е вектора на вектор (скалярное)
Определяем

вектор

Умн-е на число

Умн-е p на q

Перегрузка методовАналогично перегрузке функций, в С++ существует перегрузка методов.Класс, описывающий вектор на пл-тиУмн-е вектора на числоУмн-е вектора

Слайд 21Перегрузка при наследовании
Класс для работы с файлами
Метод для записи строки

в файл
Производный класс
Объявлены перегрузки – методы для записи целых и

вещест. чисел
Данные методы «перекрывают» методы базового класса

Данная строка позволяет исп-ть метод из базового класса

Не скомпилируется, если нет using File::write…

Перегрузка при наследованииКласс для работы с файламиМетод для записи строки в файлПроизводный классОбъявлены перегрузки – методы для

Слайд 22Правила перегрузки
Как компилятор выбирает правильную функцию при перегрузке?
Н-р, double в

int
Иначе – ошибка – вызов неоднозначен, т.е. неск-ко функций одинаково

подходят

(не на этапе выполнения)

лат. Nota bene «обрати внимание»

Правила перегрузкиКак компилятор выбирает правильную функцию при перегрузке?Н-р, double в intИначе – ошибка – вызов неоднозначен, т.е.

Слайд 23Задача

Задача

Слайд 24Задача 2

Задача 2

Слайд 25Задача 3

Задача 3

Слайд 26Переопределение методов (overriding)
Перегрузка – определение функции с тем же именем,

но другой сигнатурой.
Переопределение – определение метода с тем же именем

и сигнатурой, как у базового класса.

Базовый класс

Метод из базового класса

Переопределение методов (overriding)Перегрузка – определение функции с тем же именем, но другой сигнатурой.Переопределение – определение метода с

Слайд 27Виртуальные методы
Тогда при вызове метода через указатель на базовый класс,

какой метод будет вызван, будет зависеть не от типа указателя,

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

Слайд 28Чистые виртуальные (абстрактные) методы
Особый вид виртуальных методов – чистые вирт.

методы. Это виртуальные методы, у к-рых отсутствует реализация.
Нет реализации
Сам класс

становится абстрактным, т.е. нельзя создать экземпляр класса

Но можно создавать производные класса

Но можно создавать указатели на Student или Professor

Будет вызвана соответствующая реализация, основываясь на типе

Чистые виртуальные (абстрактные) методыОсобый вид виртуальных методов – чистые вирт. методы. Это виртуальные методы, у к-рых отсутствует

Слайд 29продолжение

продолжение

Слайд 30Виртуальный деструктор
Название университета
Деструктор класса Person, то есть поле “uni” останется

висеть в памяти

Виртуальный деструкторНазвание университетаДеструктор класса Person, то есть поле “uni” останется висеть в памяти

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

будет вызван ~Student

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

Слайд 32Полиморфизм
Первый механизм полиморфизма
Второй механизм полиморфизма

ПолиморфизмПервый механизм полиморфизмаВторой механизм полиморфизма

Слайд 33Ещё раз об ООП
Это экземпляры класса
Объединение логически связанных данных с

методами работы с этими данными
Возможность создавать производные класса
Работа с

подклассами через ссылку на базовый класс

Возможность сокрыть реализацию класса при помощи модификаторов доступа

Ещё раз об ООПЭто экземпляры классаОбъединение логически связанных данных с методами работы с этими данными Возможность создавать

Слайд 34Как правильно построить иерархию?
Базовый абстрактный класс

Как правильно построить иерархию?Базовый абстрактный класс

Слайд 35Как правильно построить иерархию?
Функция получает прямоугольник по ссылке и увеличивает

его ширину в 2 раза
Но если в эту функцию передадим

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

Слайд 36Как правильно построить иерархию?
Расширили класс квадрата, добавив еще 1 поле
Метод

вычисляет площадь
Метод будет работать некорректно для прямоугольника

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

Слайд 37Как правильно построить иерархию?
Но в некоторых частных случаях, квадрат можно

унаследовать от прямоугольника и наоборот, в зависимости от того, какие

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

Слайд 38Агрегирование vs наследование
Иногда вместо наследования используют агрегирование.
Н-р, класс компьютер (содержит

клавиатуру, мышь и т.д.)
Тогда класс комп-р агрегирует в себя объекты

классов клавиатуры, мыши и т.д.

Чем меньше зависимость, тем меньше нужно менять при изменении компонентов.

Рас-е м/у 2 двумя точками

Транспонирование матриц не имеет смыла для системы линейных уравнений

Агрегирование vs наследованиеИногда вместо наследования используют агрегирование.Н-р, класс компьютер (содержит клавиатуру, мышь и т.д.)Тогда класс комп-р агрегирует

Слайд 39Принцип подстановки Барбары Лисков

Принцип подстановки Барбары Лисков

Слайд 40Модификаторы при наследовании
B1 может вызывать все методы класса А
Только внутри

класса B2 можно вызывать методы класса А
protected = private, только

методы будут доступны также в производных класса В3
Модификаторы при наследованииB1 может вызывать все методы класса АТолько внутри класса B2 можно вызывать методы класса Аprotected

Слайд 41Переопределение private виртуальных методов
// сетевое устройство
Публичный метод send – нельзя

переопределить у наследников
Виртуальный метод можно переопределить
Это шаблон template method

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

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

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

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

позволит избежать дублирования данных и неоднозначности

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

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

генерируемые компилятором.
Что такое наследование?
Приведите пример наследования на С++

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

Слайд 45Задача на закрепление материала по модификатору const
Объявите переменную c именем m, в

которой хранится указатель на двумерный массив целых чисел (int), выделенный

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

Слайд 46Ответ
int const * const * m;

Ответint const * const * m;

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика