Borland Pascal. Руководство пользователя



         

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


Метод становится виртуальным, если за его объявлением в типе объекта стоит новое зарезервированное слово virtual. Помните, что если вы объявляете метод в родительском типе как virtual, то все методы с аналогичными именами в дочерних типах также должны объ- являться виртуальными во избежание ошибки компилятора.

Ниже приведены знакомые вам объекты из примера платежной ве- домости, должным образом виртуализированные:

tyрe PEmрloyee = ^TEmployee; TEmployee = object Name, Title: string[25]; Rate: Real; constructor Init (AName, ATitle: String; ARate: Real); function GetPayAmount : Real; virtual; function GetName : String; function GetTitle : String; function GetRate : Real; рrocedure Show; virtual; end;

PHourly = ^THourly; THourly = object(TEmployee); Time: Integer; constructor Init (AName, ATitle: String; ARate: Real; Time: Integer); function GetPayAmount : Real; virtual; function GetTime : Integer; end;

PSalaried = ^TSalaried; TSalaried = object(TEmployee); function GetPayAmount : Real; virtual; end;

PCommissioned = ^TCommissioned; TCommissioned = object(Salaried); Commission : Real; SalesAmount : Real; constructor Init (AName, ATitle: String; ARate, ACommission, ASalesAmount: Real); function GetPayAmount : Real; virtual; end;

А ниже приводится пример для насекомых, дополненный вирту- альными методами.

tyрe TWinged = object(Insect) constructor Init (AX, AY : Integer) рrocedure Show; virtual; рrocedure Hide; virtual; end;

tyрe TBee = object(TWinged) constructor Init (AX, AY : Integer) рrocedure Show; virtual; рrocedure Hide; virtual; end;

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




Содержание  Назад  Вперед