

Лекция 2. Конструкторы и деструкторы
Presentation
•
Computers
•
University
•
Practice Problem
•
Medium
Ящун Викторовна
Used 5+ times
FREE Resource
19 Slides • 12 Questions
1
ЛЕКЦИЯ 2.
КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ
2
Poll
Как Вы относитесь к предстоящему изучению новой темы на лекции?
С интересом
Негативно
Нейтрально
С тревогой
3
ЗАЧЕМ НУЖНЫ КОНСТРУКТОРЫ?
После создания объекта Point2D ничего не известно о значениях x и y
Cозданные объекты находятся в неопределенном состоянии
Это нарушает одно из положений ООП
4
ЗАЧЕМ НУЖНЫ КОНСТРУКТОРЫ?
После размещения нового объекта в памяти устройства всегда автоматически вызывается специальный метод, который называется конструктор
В конструкторе выполняется установка начального состояния нового созданного объекта
5
Можно описать несколько конструкторов в одном классе (перегрузка)
Конструктор по умолчанию - конструктор без параметров
Если явно не описан ни один конструктор, то будет автоматически создан конструктор по умолчанию
ОПРЕДЕЛЕНИЯ
Конструктор – это функция-член класса, которая вызывается автоматически при создании статического или динамического объекта класса
6
Multiple Choice
Что такое конструктор в ООП?
Метод, который сохраняет данные
Метод, который вызывается при создании объекта класса
Метод, который управляет памятью
Процедура, выполняющая операции с данными
7
СВОЙСТВА КОНСТРУКТОРА
8
Multiple Choice
Какое имя должен иметь конструктор в C++?
Любое имя
Имя класса
Имя метода
Имя переменной
9
ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ
- После определения, перед телом конструктора, ставится двоеточие и через запятую прописывается инициализация переменных
- В списке инициализации переменные следует прописывать в порядке их объявления в классе
- Список инициализации – это единственный способ инициализации константных переменных в конструкторе
10
ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ
Помимо использования списка инициализации в конструкторах, имеется возможность указывать инициализацию переменных непосредственно в классе при их объявлении
Это гарантирует нужные начальные значения и начальное состояние объекта, даже если в классе не будет явно определено ни одного конструктора
11
КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструктор по умолчанию - конструктор, который можно вызывать без передачи параметров
Конструктор по умолчанию срабатывает всякий раз, когда объект создается обычным образом, без указания каких-либо дополнительных аргументов
Если не прописать собственный конструктор, то компилятор автоматически создает конструктор по умолчанию без параметров и с пустым телом
12
Multiple Choice
Какой из следующих вариантов является конструктором по умолчанию?
Point2D() { }
Point2D(float x, float y) { }
Point2D(int a) { }
Point2D(Point2D obj) { }
13
ПЕРЕГРУЗКА КОНСТРУКТОРОВ
Так как конструкторы могут иметь произвольные параметры, то в одном классе можно объявлять несколько конструкторов с разным набором параметров
Компилятор по типу и числу аргументов выбирает тот или иной конструктор при формировании нового объекта
Конструкторы становятся перегруженными
14
Multiple Choice
Что означает перегрузка конструкторов?
Один конструктор возвращает значение
В одном классе несколько конструкторов с одинаковым именем, но различными параметрами
Конструкторы могут иметь разные имена
Конструкторы не могут иметь параметров
15
КОНСТРУКТОР ПРЕОБРАЗОВАНИЯ
Создание объектов класса
Конструктор позволил преобразовывать вещественные числа в объект класса Complex
Такие конструкторы (с одним параметром) получили название конструкторов преобразования
16
Multiple Choice
Какой синтаксис используется для создания объекта с использованием конструктора преобразования?
Complex c1 = 5;
Complex c1(5);
Complex c1{5};
Все вышеперечисленные
17
КОНСТРУКТОР ПРЕОБРАЗОВАНИЯ
Метод прибавления к текущему комплексному числу другого комплексного числа
Компилятор создает временный объект типа Complex, инициализируя его вещественным значением, и выполняет сложение
18
ЗАПРЕТ ПРЕОБРАЗОВАНИЯ
Если неявное преобразование типов следует запретить, то перед конструктором преобразования достаточно прописать ключевое слово explicit
19
Multiple Choice
Что происходит, если конструктор преобразования аннотирован ключевым словом explicit?
Конструктор будет вызываться неявно
Неявное преобразование типов запрещено
Конструктор будет доступен только для статических объектов
Конструктор можно вызвать только один раз
20
Деструктор – метод класса, предназначенный для освобождения памяти, занимаемой объектом
Деструктор выполняет противоположные конструктору действия и вызывается автоматически при уничтожении объекта
Имя деструктора начинается с символа тильда (~), далее следует имя класса
ДЕСТРУКТОР
21
СВОЙСТВА ДЕСТРУКТОРА
- Деструктор не наследуется
- Если деструктор не определён явным образом, компилятор автоматически создают пустой деструктор
- Нельзя объявить указатель на деструктор
- Деструктор описывают явным образом, при необходимости выполнить какие-то дополнительные действия перед освобождением памяти, занимаемой объектом
22
ЗАЧЕМ НУЖЕН ДЕСТРУКТОР?
В конструкторах происходит выделение памяти под массив, но нигде нет ее освобождения
При создании объектов этого класса возможна утечка памяти
23
Multiple Choice
Каковы параметры деструктора?
Может иметь любые параметры
Не имеет параметров
Всегда принимает один параметр
Может возвращать значение
24
ПРИСВАИВАНИЕ ОБЪЕКТОВ
Объект pt2 будет составлять точную копию объекта pt, т.к. данные из области памяти ptпобайтно копируются в область памяти pt2
Указатель coords двух разных объектов будет ссылаться на одну и ту же область памяти
При уничтожении объектов, выделенная память освобождается дважды, что приводит к аварийному завершению программы
25
Multiple Choice
Какой проблемой может завершиться побайтовое копирование двух объектов класса PointND при их уничтожении?
Проблема с производительностью
Утечка памяти
Двойное освобождение памяти
Проблем не будет
26
КОНСТРУКТОР КОПИРОВАНИЯ
Параметр - константная ссылка на объект текущего класса
Необходимо при копировании объектов дополнительно выделять память для координат нового объекта
Для этого предназначен конструктор копирования
По этому типу параметра компилятор «понимает», что это конструктор копирования и использует его при создании нового объекта на основе другого того же типа
27
Multiple Choice
Какой тип параметра обычно указывается в конструкторе копирования?
Ссылка на объект текущего класса
Указатель на объект текущего класса
Значение объекта текущего класса
Константное значение типа int
28
ПЕРЕОПРЕДЕЛЕНИЕ ПРИСВАИВАНИЯ
Если вначале создать объект, а потом присвоить ему другой, то конструктор копирования не сработает, т.к. объект создается с вызовом конструктора по умолчанию
После создания объекта никакие конструкторы не вызываются
Необходимо переопределить операцию присваивания
29
ДЕЛЕГИРОВАНИЕ КОНСТРУКТОРОВ
Подход, когда один конструктор вызывает другой конструктор этого же класса, получил название делегирование конструкторов, а сами конструкторы, которые вызывают другие, – делегирующими
В списке инициализации допускается вызов конструкторов текущего класса
30
Multiple Choice
Каковы преимущества делегирования конструкторов?
Сокращение времени компиляции
Упрощение кода и избежание дублирования
Увеличение производительности
Обеспечение совместимости с другими классами
31
Poll
Как вы оцениваете уровень сложности изученного материала?
Очень простой
Умеренно сложный
Сложный
Чрезвычайно сложный
ЛЕКЦИЯ 2.
КОНСТРУКТОРЫ И ДЕСТРУКТОРЫ
Show answer
Auto Play
Slide 1 / 31
SLIDE
Similar Resources on Wayground
21 questions
Інфогафіка
Presentation
•
12th Grade
27 questions
Самообразование педработников
Presentation
•
KG
25 questions
Дама с собачкой 1 Чехов
Presentation
•
12th Grade - University
21 questions
C++ if switch
Presentation
•
University
24 questions
5 класс. Животные
Presentation
•
KG
21 questions
Заключение договора в сети Интернет
Presentation
•
University
23 questions
6 класс. Листья
Presentation
•
KG
26 questions
Культура российского государства 16-18 вв.. Книгопечатание.
Presentation
•
University
Popular Resources on Wayground
24 questions
PBIS-HGMS Day 10
Quiz
•
6th - 8th Grade
10 questions
HCS SCI 03 Summer School Review 3
Quiz
•
3rd Grade
11 questions
Home Scope
Quiz
•
7th - 8th Grade
15 questions
HCS SCI 05 Summer School Assessment 3 Review
Quiz
•
5th Grade
35 questions
Lufkin Road Middle School Student Handbook & Policies Assessment
Quiz
•
7th Grade
18 questions
Geo 11.3 Area of Circles and Sectors
Quiz
•
9th - 11th Grade