Чистая виртуальная функция - Большая Энциклопедия Нефти и Газа, статья, страница 4
В какой еще стране спирт хранится в бронированных сейфах, а "ядерная кнопка" - в пластмассовом чемоданчике. Законы Мерфи (еще...)

Чистая виртуальная функция

Cтраница 4


В нашем следующем примере ( рис. 10.2) повторно рассматривается иерархия форм точка, круг и цилиндр из предыдущей главе. Но мы дополнительно создаем для этих форм головной элемент этой иерархии в виде абстрактного базового класса Shape. У класса Shape имеются две чистых виртуальных функции printShapeName и print, так что Shape является абстрактным базовым классом. Класс Shape включает также еще две другие виртуальные функции - area и volume, каждая из которых имеет в классе реализацию, возвращающую нулевое значение. Класс Point наследует эти реализации от класса Shape. Это имеет смысл, поскольку и площадь, и объем точки равны нулю.  [46]

47 Определения функций-элементов класса Point ( часть 3 из 9.| Определение класса Circle ( часть 4 из 9. [47]

Класс Circle ( рис. 20.2, части 4 и 5) выводится из класса Point с открытым наследованием. Функция area замещается, так как Circle имеет площадь. Функция printShapeNa - me является реализацией чистой виртуальной функции, определенной в базовом классе.  [48]

Тем не менее все же иногда возникает необходимость выполнения чистой виртуальной функции. Она может быть вызвана из объекта, произведенного от ADT, например чтобы обеспечить общую функциональность для всех замещенных функций. Функция замещается в классе Circle, что необходимо для создания объекта этого класса, но в объявлении замещенной функции делается вызов чистой виртуальной функции из базового класса. Это средство используется для достижения дополнительной функциональности методов класса.  [49]

Рассмотрим применение полиморфизма и виртуальных функций. Экранному администратору необходимо отображать множество объектов, включая новые типы объектов, которые будут включаться в систему даже после того, как будет написана сама программа экранного администратора. Системе может потребоваться отображать разные формы ( базовым классом для них является класс Shape), такие, как квадраты, окружности, треугольники, прямоугольники и т.п. Каждый из этих классов форм является производным от базового класса Shape. Экранный администратор использует указатели базового класса ( указатели на Shape) для управления всеми отображаемыми на экране объектами. Чтобы нарисовать объект ( безотносительно уровня, на котором находится объект в иерархии наследования), экранный администратор использует указатель базового класса на объект и просто посылает сообщение объекту: нарисовать. Функция draw объявляется чистой виртуальной функцией в базовом классе Shape и должна быть переопределена в каждом из производных классов.  [50]

Полиморфизм особенно эффективен при создании многоуровневых систем программного обеспечения. В операционных системах, например, каждый тип физического устройства может функционировать совершенно отлично от устройств других типов. Независимые от устройства команды read или write, читающие или записывающие данные с устройств и на устройства, являются командами универсальными. Команда write, посланная объекту драйвер устройства, должна интерпретироваться этим драйвером в соответствии с тем, каким образом он управляет устройствами конкретного типа. Но сам по себе вызов команды write не зависит от устройства - это просто команда передать указанному устройству некоторое число байт данных из памяти. Объектно-ориентированная операционная система может использовать абстрактный базовый класс, чтобы обеспечить соответствующий интерфейс для всех драйверов устройств. Все производные классы наследуют общее поведение этого абстрактного базового класса. Возможные действия драйверов устройств ( т.е. общий интерфейс) определяются чистыми виртуальными функциями абстрактного базового класса. Реализация этих виртуальных функций, соответствующих специфическим типам драйверов устройств, осуществляется в производных классах.  [51]

Полиморфизм особенно эффективен при реализации многоуровневых систем программного обеспечения. В операционных системах, например, каждый тип физического устройства может работать совершенно отлично от других. Несмотря на это, команды чтения данных с таких физических устройств read и команды записи данных на физические устройства write могут иметь определенное единообразие. Сообщение write, посланное объекту драйверу устройства, интерпретируется специальным образом в зависимости от используемого драйвера и от того, каким образом этот драйвер управляет устройствами конкретного типа. Тем не менее, этот вызов write сам по себе действительно не отличается от вызовов write любого другого устройства в системе; вызов просто перемещает некоторое число байтов из памяти в конкретное устройство. Объектно-ориентированные операционные системы могут использовать абстрактные базовые классы для того, чтобы реализовать интерфейс, пригодный для драйверов всех устройств. Затем с помощью наследования этих абстрактных базовых классов образуются производные классы, которые работают одинаковым образом. Указанные возможности ( т.е. открытый интерфейс), предоставленные драйверам устройств, обеспечиваются чистыми виртуальными функциями абстрактных базовых классов. Реализации этих виртуальных функций обеспечиваются в производных классах и соответствуют конкретным типам драйверов устройств.  [52]



Страницы:      1    2    3    4