- •Языки программирования и методы трансляции. Ответы на экзаменационные вопросы.
- •1 Курс 2 семестр
- •1 Вопрос.
- •2 Вопрос.
- •3 Вопрос.
- •4 Вопрос.
- •5 Вопрос.
- •6 Вопрос.
- •7 Вопрос.
- •8 Вопрос.
- •9 Вопрос.
- •10 Вопрос.
- •11 Вопрос.
- •12 Вопрос.
- •13 Вопрос.
- •14 Вопрос.
- •15 Вопрос.
- •16 Вопрос.
- •17 Вопрос.
- •18 Вопрос.
- •19 Вопрос.
- •20 Вопрос.
- •21 Вопрос.
- •22 Вопрос.
- •23 Вопрос.
- •24 Вопрос.
12 Вопрос.
Определение и вызов конструктора копии.
Конструктор копии создает объект класса, копируя при этом данные из существующего класса.
В С++ существуют следующие правила работы с конструктором:
1). Имя должно совпадать с именем класса;
2). Нельзя определять тип возвращаемого для конструктора;
3). Класс может иметь несколько конструкторов или не иметь их совсем;
4). Конструктор может не иметь параметров.
Формат конструктора копии:
<имя класса>(const <имя класса>&<переменная>){<тело конструктора>}; где &<переменная> - ссылка на объект, который копируется.
Если не определить конструктор копии, компилятор создаст конструктор копии по умолчанию, но он будет создавать поверхностную копию, копируя только элементы-данные. При этом будет скопировано содержимое данных-элементов, содержащих указатели на другие данные, но сами эти данные скопированы не будут.
13 Вопрос.
Наследование. Определение базового и производного классов.
Наследование классов – это механизм позволяющий получить новый класс на основе существующего класса, соответственно производный и базовые классы. Производный класс наследует все методы базового класса и может дополнять собственными данными и методами.
Синтаксис: class<имя производного класса>:<спецификатор доступа><имя базового класса>{<список элементов производного класса>};
Спецификаторы доступа:
1.public
Если базовый класс наследуется как открытый класс, то его открытые элементы остаются открытыми элементами, защищенные элементы–защищенными элементами, а закрытые элементы будут закрытыми элементами.
Защищенными являются элементы, которые открыты для производных классов, но закрыты вне иерархии классов.
2.private
Если базовый класс наследуется как private, то его защищенные и открытые элементы становятся закрытыми элементами.
3.protected
Если базовый класс наследуется как защищенный, то все его открытые и защищенные элементы становятся защищенными элементами.
При наследовании элементы базового и производного классов могут иметь одинаковые имена, в таком случае элемент базового класса становится недоступным для производного класса.
Любой производный класс может быть базовым классом для других классов.
Основное достоинство наследования состоит в том, что создав базовый класс, который определяет общие атрибуты. Его можно использовать для построения любого числа производных классов.
14 Вопрос.
Доступ к членам базовых и производных классов.
Производный класс не может получить доступ к закрытым элементам базового класса.
Решения этой проблемы:
1). Можно private присвоить protected;
2). Использовать определенные функции базового класса, позволяющие получить доступ к элементам.
15 Вопрос.
Вызов конструкторов и деструкторов базового и производного классов при создании иерархии классов.
В иерархии классов как базовый, так и производный классы могут иметь конструкторы.
Конструкторы и деструкторы из базового класса не наследуются, поэтому при создании производного класса необходимо учитывать следующее:
1). Если в базовом классе вообще нет конструктора или есть конструктор по умолчанию, производному классу конструктор нужен, только если требуется инициализировать поля, введенные в этот класс;
2). Если не определен ни один конструктор, то компилятор самостоятельно создаст конструктор по умолчанию, из которого будет вызван конструктор по умолчанию базового класса;
3). Если в базовом классе есть конструктор с аргументами, то производный класс должен содержать конструктор со списком аргументов, включающим значения для передачи конструктору базового класса; конструктор базового класса вызывается в списке инициализации.
Необходимость в деструкторе для производного класса определяется тем, нужно ли освобождать какие-либо ресурсы, выделенные в компиляторе. Если такой необходимости нет, можно доверить компилятору создать деструктор по умолчанию. В нем обеспечивается вызов деструктора базового класса.
На этапе выполнения программы, при создании объекта производного класса сначала вызываются конструкторы базовых классов, начиная с самого верхнего уровней, затем конструкторы объектов-элементов класса и в последнюю очередь – конструктор класса.
При уничтожении объекта деструкторы вызываются в порядке, обратном вызову конструкторов.
