Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
assistance.doc
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
90.62 Кб
Скачать

7 Вопрос.

Перегрузка конструкторов. Конструктор по умолчанию.

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

Например, 1-ый конструктор создает пустую строку, а 2-ой создает объект по заданной строке.

Если в классе нет конструктора, то компилятор предоставляет 2 конструктора – копирующий и по умолчанию.

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

8 Вопрос.

Присваивание объектов.

Если 2 объекта имеют одинаковый тип, то есть они оба принадлежат одному классу, то один объект можно присвоить другому объекту.

При этом данные первого объекта поразрядно копируются во второй, то есть объекты будут идентичными с точностью до разряда.

9 Вопрос.

Передача функциям объектов по значению. Побочные эффекты при передаче объектов по значению.

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

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

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

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

Чтобы избежать такой ошибки можно передавать объект по ссылке. Однако, передача объектов по ссылке не всегда применима.

Можно создать собственный конструктор копии, который может корректно создать копию объекта.

10 Вопрос.

Передача функциям объектов по ссылке.

В этом случае функции передается адрес объекта, и функция будет обрабатывать непосредственно объект, а не его копию. Изменения в объекте повлияют на аргумент (объект).

Передача объекта по ссылке имеет преимущество по сравнению с передачей по значению, так как не тратиться время на создание и разрушение объекта.

11 Вопрос.

Возвращение функциями объектов. Побочные эффекты при возвращении функциями объектов.

Чтобы функции можно было вернуть объект как результат, нужно объявить в качестве ее типа имя соответствующего класса и обеспечить возвращение этого объекта через оператор return.

Если функция разрушает объекты, то автоматически создается временный объект, который хранит возвращенное значение.

Разрушение временного объекта может вызвать побочные эффекты. Кроме того, побочные эффекты могут возникать при инициализации одного объекта другим.

Необходимо создавать конструктор копии.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]