Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 37 стр.

UptoLike

Составители: 

37
Для того, чтобы компилятор мог отличать старые и новые версии
членов класса в язык введено зарезервированное слово inherited. Выра-
жение
inherited ИмяЧлена
говорит о том , что обращение производится к члену текущего объекта,
унаследованному из непосредственного предшественника его класса в
иерархии наследования. Указатель self здесь уже недопустим .
Заметим , что таким образом можно получить доступ лишь к чл е-
нам ближайшего предка. Если, скажем , класс C переопределил метод X
класса B, а клас с B в свою очередь переопределил соответствующий
метод класса A, то вызвать версию метода X для класса A при реализ а-
ции класса C невозможно.
Итак, рассмотрим
Пример 3.2. Реализация класса PAryFraction.
unit UnitPAryFraction;
interface
uses UnitRational; // подключаем модуль,
// в котором реализован класс Rational
type
PAryFraction = class(Rational)
// здесь находится приведенный выше интерфейс класса
end;
implementation
uses SysUtils; // модуль включает поддержку исключений
function PAryFraction.isPrime(value: Integer): boolean;
var i:Integer;
begin
if value<2 then begin result:=false; exit; end;
result:=true; i:=1;
repeat
inc(i); // i изменяется от 2 и максимум до value/2+1
if ((value mod i)=0) and (i<value) then result:=false;
// если value делится нацело на i, значит оно не простое
until (result=false) or (i>=(value div 2));
end;
function PAryFraction.isPowerOfBase(value: Integer): boolean;
var v:Integer;
begin
       Дл я того, чтобы ком пил ятор м ог отл ичат ь с т ары е и нов ы е в ерс ии
чл енов кл ас с а в яз ы к в в ед еноз арез ерв иров анное с л ов оinherited. Вы ра-
жение
                                inherited ИмяЧлена
гов орит о том , чтообращение произ в од ит с я к чл ену т екущего объект а,
унас л ед ов анном у из непос ред с т в енного пред ш ес т в енника его кл ас с а в
иерархии нас л ед ов ания. Указ ат ел ь self з д ес ь уже нед опус т им .
         Зам ет им , чтот аким образ ом м ожнопол учит ь д ос т уп л иш ь к чл е-
нам бл ижайш егопред ка. Е с л и, с кажем , кл ас с C переопред ел ил м етод X
кл ас с а B, а кл ас с B в с в ою очеред ь переопред ел ил с оот в ет с т в ующий
м етод кл ас с а A, тов ы з в ат ь в ерс ию м етод а X д л я кл ас с а A при реал из а-
ции кл ас с а C нев оз м ожно.
         И т ак, рас с м от рим

Пример 3.2. Реал из ация кл ас с а PAryFraction.

unit UnitPAryFraction;

interface
uses UnitRational; // подключаем модуль,
                   // в котором реализован класс Rational
type
  PAryFraction = class(Rational)
    // здесь находится приведенный выше интерфейс класса
  end;

implementation
uses SysUtils; // модуль включает поддержку исключений

function PAryFraction.isPrime(value: Integer): boolean;
  var i:Integer;
  begin
    if value<2 then begin result:=false; exit; end;
    result:=true; i:=1;
    repeat
       inc(i); // i изменяется от 2 и максимум до value/2+1
       if ((value mod i)=0) and (i=(value div 2));
  end;

function PAryFraction.isPowerOfBase(value: Integer): boolean;
  var v:Integer;
  begin



                                          37