ВУЗ:
Составители:
Рубрика:
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
