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

12 Вопрос.

Определение и вызов конструктора копии.

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

В С++ существуют следующие правила работы с конструктором:

1). Имя должно совпадать с именем класса;

2). Нельзя определять тип возвращаемого для конструктора;

3). Класс может иметь несколько конструкторов или не иметь их совсем;

4). Конструктор может не иметь параметров.

Формат конструктора копии:

<имя класса>(const <имя класса>&<переменная>){<тело конструктора>}; где &<переменная> - ссылка на объект, который копируется.

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

13 Вопрос.

Наследование. Определение базового и производного классов.

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

Синтаксис: class<имя производного класса>:<спецификатор доступа><имя базового класса>{<список элементов производного класса>};

Спецификаторы доступа:

1.public

Если базовый класс наследуется как открытый класс, то его открытые элементы остаются открытыми элементами, защищенные элементы–защищенными элементами, а закрытые элементы будут закрытыми элементами.

Защищенными являются элементы, которые открыты для производных классов, но закрыты вне иерархии классов.

2.private

Если базовый класс наследуется как private, то его защищенные и открытые элементы становятся закрытыми элементами.

3.protected

Если базовый класс наследуется как защищенный, то все его открытые и защищенные элементы становятся защищенными элементами.

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

Любой производный класс может быть базовым классом для других классов.

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

14 Вопрос.

Доступ к членам базовых и производных классов.

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

Решения этой проблемы:

1). Можно private присвоить protected;

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

15 Вопрос.

Вызов конструкторов и деструкторов базового и производного классов при создании иерархии классов.

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

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

1). Если в базовом классе вообще нет конструктора или есть конструктор по умолчанию, производному классу конструктор нужен, только если требуется инициализировать поля, введенные в этот класс;

2). Если не определен ни один конструктор, то компилятор самостоятельно создаст конструктор по умолчанию, из которого будет вызван конструктор по умолчанию базового класса;

3). Если в базовом классе есть конструктор с аргументами, то производный класс должен содержать конструктор со списком аргументов, включающим значения для передачи конструктору базового класса; конструктор базового класса вызывается в списке инициализации.

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

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

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

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