ВУЗ:
Составители:
Рубрика:
75
ПРИЛОЖЕНИЕ 3. К ЛАСС R ATIONAL
Класс Rational отличается от одноименного класса из третьей час -
ти пособия [*] значительно менее, чем Number. Новыми являются мет о-
ды IsEqual, Assign и AsString, замещающие соответствующие абстракт-
ные методы класса Number. Методы Plus, Minus, Dot и Slash, напротив ,
отсутствуют (т. е. не переопределяются). Их реализация в классе Number
нас вполне устраивает.
Пример П .3.1. Код класса Rational.
unit UnitRational;
interface
uses UnitNumber;
type
Rational = class(Number)
private
num: Integer;
den: Integer;
protected
procedure Normalize; virtual;
procedure Reduce; virtual;
public
function IsEqual(n: Number): Boolean; override;
procedure Add (n: Number); override;
procedure Subtract (n: Number); override;
procedure MultiplyBy(n: Number); override;
procedure DivideBy (n: Number); override;
procedure Assign (n: Number); override;
function AsString: String; override;
constructor Create; override;
procedure SetNum(value: Integer); virtual;
procedure SetDen(value: Integer); virtual;
function GetNum: Integer; virtual;
function GetDen: Integer; virtual;
end;
implementation
uses SysUtils;
procedure Rational.Normalize;
{ Процедура приводит текущий объект к нормальной форме. }
begin
if self.den<0 then
begin self.num:=-self.num; self.den:=-self.den; end;
end;
П РИ Л О Ж Е Н И Е 3. К Л А ССRATIONAL Кл ас с Rational отл ичает с я от од ноим енногокл ас с а из т рет ь ей час - т и пос обия [*] з начит ел ь ном енее, чем Number. Н ов ы м и яв л яют с я м ето- д ы IsEqual, Assign и AsString, з ам ещ ающ ие с оот в ет с т в ующ ие абс т ракт - ны е м етод ы кл ас с а Number. М етод ы Plus, Minus, Dot и Slash, напрот ив , от с ут с т в уют (т. е. не переопред ел яют с я). И х реал из ац ия в кл ас с е Number нас в пол не ус т раив ает. ПримерП.3.1. Код кл ас с а Rational. unit UnitRational; interface uses UnitNumber; type Rational = class(Number) private num: Integer; den: Integer; protected procedure Normalize; virtual; procedure Reduce; virtual; public function IsEqual(n: Number): Boolean; override; procedure Add (n: Number); override; procedure Subtract (n: Number); override; procedure MultiplyBy(n: Number); override; procedure DivideBy (n: Number); override; procedure Assign (n: Number); override; function AsString: String; override; constructor Create; override; procedure SetNum(value: Integer); virtual; procedure SetDen(value: Integer); virtual; function GetNum: Integer; virtual; function GetDen: Integer; virtual; end; implementation uses SysUtils; procedure Rational.Normalize; { Процедура приводит текущий объект к нормальной форме. } begin if self.den<0 then begin self.num:=-self.num; self.den:=-self.den; end; end; 75