ВУЗ:
Составители:
Рубрика:
28
Определения методов GetNum, GetDen и SetNum очевидны . Про-
цедура SetDen прежде, чем использовать значение, переданное ей в ка-
честве параметра, проверяет, удовлетворяет ли оно условию нормализ а-
ции. Если нет — возбуждается исключение. Поскольку в се подпрограм -
мы находятся в модуле, содержащем определение класса, всюду допус -
кается прямое обращение к полям , невзирая на их облать видимости.
Реализация процедур Normalize, Reduce и DivideBy отличается от
более ранней версии только заменой имени первого параметра на self.
То, что мы имеем дело с объектами, а не с записями, проявляется лишь в
реализации м етода Slash.
Тип значения этой функции определен как Rational, следовательно
она должна возвращать адрес некоторого объекта нашего класса. Ра з -
мещение данного объекта в памяти производит инструкция
res:=Rational.Create;
Только после этого становится возможной инициализация его полей и
другие операции. Следует обратить особое внимание на то, что удалять
объект res по завершении работы функции нельзя: он хр анит результаты
вычислений и должен быть передан вызывающей программе. Последняя
и должна поз а ботиться об освобождении памяти.
В заключение рассмотрим приложение, демонстрирующее работу
с объектами класса Rational и представляющее собой простую модифи-
кацию программы из § 1.2.
Пример 2.6. Демонстрация операций, выполняемых над объектами клас-
са Rational.
program TestRational;
{$APPTYPE CONSOLE}
uses UnitRational; // подключаем модуль с определением класса
var r1,r2,ra,rs,rm,rd: Rational;
begin
r1:=Rational.Create; // переменные r1 и r2 размещаются в памяти
r2:=Rational.Create; //
r1.SetNum(1); r1.SetDen(2); // переменным r1 и r2 присваиваются
r2.SetNum(2); r2.SetDen(6); // значения 1/2 и 2/6
ra:=r1.Plus(r2);
rs:=r1.Minus(r2);
rm:=r1.Dot(r2);
rd:=r1.Slash(r2);
{ Для объекта r1 вызываются методы-функции с адресом объекта r2
в качестве параметра. Возвращаемые ими ссылки на объекты,
Опред ел ения м етод ов GetNum, GetDen и SetNum очев ид ны . Про-
цед ура SetDen прежд е, чем ис пол ь з ов ат ь з начение, перед анное ей в ка-
чес т в е парам ет ра, пров еряет, уд ов л ет в оряет л и оноус л ов ию норм ал из а-
ции. Е с л и нет — в оз бужд ает с я ис кл ючение. Пос кол ь ку в с е под програм -
м ы наход ят с я в м од ул е, с од ержащем опред ел ение кл ас с а, в с юд у д опус -
кает с я прям ое обращение к пол ям , нев з ирая на ихобл ат ь в ид им ос т и.
Реал из ация процед ур Normalize, Reduce и DivideBy отл ичает с я от
бол ее ранней в ерс ии тол ь ко з ам еной им ени перв ого парам ет ра на self.
То, чтом ы им еем д ел ос объект ам и, а не с з апис ям и, прояв л яет с я л иш ь в
реал из ации м етод а Slash.
Т ип з начения э той функции опред ел ен как Rational, с л ед ов ат ел ь но
она д ол жна в оз в ращат ь ад рес некоторого объект а наш его кл ас с а. Раз -
м ещение д анногообъект а в пам ят и произ в од ит инс т рукция
res:=Rational.Create;
Тол ь ко пос л е э того с т анов ит с я в оз м ожной инициал из ация его пол ей и
д ругие операции. Сл ед ует обрат ит ь ос обое в ним ание на то, чтоуд ал ят ь
объект res поз ав ерш ении работ ы функции нел ь з я: он хранит рез ул ьт ат ы
в ы чис л ений и д ол жен бы т ь перед ан в ы з ы в ающей програм м е. Пос л ед няя
и д ол жна поз абот ит ь с я об ос в обожд ении пам ят и.
В з акл ючение рас с м от рим прил ожение, д ем онс т рирующее работ у
с объект ам и кл ас с а Rational и пред с т ав л яющее с обой прос тую м од ифи-
кацию програм м ы из § 1.2.
Пример 2.6. Дем онс т рация операций, в ы пол няем ы хнад объект ам и кл ас -
с а Rational.
program TestRational;
{$APPTYPE CONSOLE}
uses UnitRational; // подключаем модуль с определением класса
var r1,r2,ra,rs,rm,rd: Rational;
begin
r1:=Rational.Create; // переменные r1 и r2 размещаются в памяти
r2:=Rational.Create; //
r1.SetNum(1); r1.SetDen(2); // переменным r1 и r2 присваиваются
r2.SetNum(2); r2.SetDen(6); // значения 1/2 и 2/6
ra:=r1.Plus(r2);
rs:=r1.Minus(r2);
rm:=r1.Dot(r2);
rd:=r1.Slash(r2);
{ Для объекта r1 вызываются методы-функции с адресом объекта r2
в качестве параметра. Возвращаемые ими ссылки на объекты,
28
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »
