Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Виртуальные методы.




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

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

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

Пример

Company=object

Name, Address: string;

Constructor Init(IName, Iaddress: string);

Function GetName: string;

Function GetAddress: string;

Function GetExpense: real; virtual;

Function GetRewenue: real; virtual;

Function Budget: real;

End;

Commerc = object (Company)

NonTax: real;

Constructor Init(IName, Iaddress: string; InonTax:real);

Procedure SetNonTax (newNT: real);

Function GetNonTax:: real;

Function GetExpense: real; virtual;

Function GetRewenue: real; virtual;

End;

Метод Budget уходит из определения объекта Commerc. Commerc больше не нуждается в замене метода Budget объекта Company неизменной копией откомпилированной в собственном контексте, т. к. все вложенные вызовы методов в методе Budgetпереходят к методам Commerc, а не к методам Company как было раньше. В определении объектов определилось новое служебное слово constructor. Все типы объектов имеющие виртуальные типы должны иметь его. Это особый вид процедуры, который выполняет некоторую установочную работу для механизма. Constructor обязательно должен вызываться до вызова виртуального метода. Каждый отдельный экземпляр объекта должен инициализироваться отдельным вызовом Constructor.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных