Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 57стр.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
478.21 Кб
Скачать

Вопрос 26. Понятие виртуальной функции.

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

Когда ф-ция переопределяется в производном классе, повторять слово virtual необязательно.

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

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

Она может быть другом для другого класса. Конструктор не м. б. виртуальным.

Если вирт ф-ция не переопределяется в классе, то исп-ся её версия из баз класса.

Осн св-ва исп-я вирт ф-ий:

- вирт мех-м поддерж полиморфизм на этапе вып-ия программы.

- вирт ф-ии можно объявить только в классах и стр-рах

- вирт ф-ии не могут быть static

- для вызова вирт ф-и требуется больше времени чем для невиртуальной

Вопрос 27. Понятие полиморфизма.

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

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

Базовый класс определяет общий интерфейс, к-ый имеют все производные от него классы, и вместе с тем полиморфизм позволяет производным классам иметь свои собственные реализации методов. Благодаря этому полиморфизм можно определить как «один интерфейс – множество методов». Отделение интерфейса от реализации позволяет создавать библиотеки классов.

Вопрос 28. Абстрактные и конкретные базовые классы.

Абстрактный родительский класс — это класс, не имеющий экземпляров. Он используется только для порождения подклассов. Суперкласс, объекты к-го никогда не будут реализованы, в к-ом заданы только атрибуты и сигнатуры операций, но не определены методы, реализующие его операции, называется абстрактным классом

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

Главное назначение абстр классов – опрелеление интерфейса и его реализация для некот иерархии классов.

Классы, объекты к-рых могут быть реализованы, называются конкретными классами.

Виртуальные базовые классы. Они всегда инициализируются лишь один раз вызовом безаргументного конструктора (если обращение к нему не осуществляется пользователем, такой конструктор вызывается системой). Это происходит до какой бы то ни было другой инициализации. Чистой виртуальной ф-цией явл-ся такая ф-ция, у к-ой в ее объявлении тело определено как 0 (инициализатор равен 0); например:

virtual float earnings( ) const = 0; // чистая виртуальная ф-ция