Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Ответы все.docx
Скачиваний:
23
Добавлен:
01.03.2016
Размер:
71.65 Кб
Скачать

22. Абстрактное наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class).

В некоторых языках используются абстрактные классы. Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов, наследованных от абстрактного. Например, абстрактным классом может быть базовый класс «сотрудник вуза», от которого наследуются классы «аспирант», «профессор» и т. д. Так как производные классы имеют общие поля и функции (например, поле «год рождения»), то эти члены класса могут быть описаны в базовом классе. В программе создаются объекты на основе классов «аспирант», «профессор», но нет смысла создавать объект на основе класса «сотрудник вуза».

23.24.Полиморфизм. Простой полиморфизм. Сложный полиморфизм

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

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

Конкретные механизмы реализации полиморфизма:

1. Чистый полиморфизм – один код функции по разному интерпретируется в зависимости от типов аргумент:

2. Перезагрузка – определение нескольких функций с одним именем (С++);

3. Переопределение (простой полиморфизм) – конкретный метод определяется телом объекта при компиляции программы (ранее связывание).

4. Полиморфные объекты (сложный полиморфизм) – конкретный метод определяется топим объекта в процессе выполнения программы (позже связывание).

5. Обобщение функции (шаблоны) – используются при реализации в языке параметризованных классов (С++).

25.Полиморфизм. Реализация механизма позднего связывания осуществляется с использованием специальной таблицы, таблицы виртуальных методов (ТВМ).

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

26.Перегрузка функций.

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

• Перегрузка функций позволяет вам использовать одно и то же имя для нескольких функций с разными типами параметров.

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

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

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

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