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

UptoLike

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

44
применять его без пред варительного вызова оператора is следует лишь в
том случае, когда вероя т ность успешного результата достаточно высока.
Все описанные выше средства использует
Пример 3.3. Реализация операций в классе PAryFraction.
procedure PAryFraction.Add(r: Rational);
begin
if (r is PAryFraction) and ((r as PAryFraction).base=self.base)
then inherited Add(r)
{ Если r содержит адрес объекта класса PAryFraction и основание
этого объекта совпадает с текущим, то сложение допустимо и
выполняется посредством старой версии метода. }
else raise Exception.Create('Invalid operation');
{ Иначе возбуждается исключение с сообщением
"Недопустимая операция". }
end;
procedure PAryFraction.DivideBy(r: Rational);
begin
if (r is PAryFraction) and ((r as PAryFraction).base=self.base)
and self.isPowerOfBase(r.GetNum) then inherited DivideBy(r)
{ Дополнительно проверяется, является ли числитель r
степенью основания. }
else raise Exception.Create('Invalid operation');
end;
function PAryFraction.Plus(r: Rational): Rational;
var res: PAryFraction;
begin
if (r is PAryFraction) then
if (r as PAryFraction).base=self.base then begin
res:=PAryFraction.CreateAs(self.GetNum, self.GetDen);
res.base:=self.base;
res.Add(r); // вызов определенного выше метода Add
result:=res;
end
else raise Exception.Create('Invalid operation')
{ Если объект r принадлежит классу PAryFraction и имеет то же
основание, что и текущий, то создается копия текущего объекта,
прим енят ь егобез пред в арит ел ь ногов ы з ов а оператора is с л ед ует л иш ь в
том с л учае, когд а в ероят нос т ь ус пеш ногорез ул ьт ат а д ос т аточнов ы с ока.
        Вс е опис анны е в ы ш е с ред с т в а ис пол ь з ует

Пример 3.3. Реал из ация операций в кл ас с е PAryFraction.

procedure PAryFraction.Add(r: Rational);
  begin
    if (r is PAryFraction) and ((r as PAryFraction).base=self.base)
    then inherited Add(r)

     { Если r содержит адрес объекта класса PAryFraction и основание
       этого объекта совпадает с текущим, то сложение допустимо и
       выполняется посредством старой версии метода. }

     else raise Exception.Create('Invalid operation');

     { Иначе возбуждается исключение с сообщением
       "Недопустимая операция". }

  end;

procedure PAryFraction.DivideBy(r: Rational);
  begin
    if (r is PAryFraction) and ((r as PAryFraction).base=self.base)
      and self.isPowerOfBase(r.GetNum) then inherited DivideBy(r)

     { Дополнительно проверяется, является ли числитель r
       степенью основания. }

    else raise Exception.Create('Invalid operation');
  end;

function PAryFraction.Plus(r: Rational): Rational;
  var res: PAryFraction;
  begin
    if (r is PAryFraction) then
      if (r as PAryFraction).base=self.base then begin
        res:=PAryFraction.CreateAs(self.GetNum, self.GetDen);
        res.base:=self.base;
        res.Add(r); // вызов определенного выше метода Add
        result:=res;
      end
      else raise Exception.Create('Invalid operation')

         { Если объект r принадлежит классу PAryFraction и имеет то же
           основание, что и текущий, то создается копия текущего объекта,


                                         44