ВУЗ:
Составители:
Рубрика:
66
result.TypeNameIs:=TypeNameIs; //
result.Destroy:=Destroy; //
result.Plus:=Plus; //
result.Minus:=Minus; // процедурным указателям
result.Dot:=Dot; // присваиваются адреса
result.Slash:=Slash; // конкретных подпрограмм
result.Add:=Add; //
result.Subtract:=Subtract; //
result.MultiplyBy:=MultiplyBy; //
result.DivideBy:=DivideBy; //
result.Normalize:=Normalize; //
result.Reduce:=Reduce; //
result.num:=0; // числовые поля инициализируются
result.den:=1; // корректными значениями
end;
function CreateAs(n, m: Integer): PRational;
begin
if m<>0 then begin // знаменатель должен быть положителен
result:=UnitRational.Create; // вызов функции, определенной выше
result.num:=n;
result.den:=m;
end
else raise Exception.Create('Illegal value of denominator');
end;
Здесь уже адреса подпрограмм сопоставляются всем указателям ,
так что незамещенных абстрактных методов не остается. Кроме этого,
инициализировать приходится также и числовые поля. Как и ранее, для
удобства доба в ляется еще один конструктор — CreateAs.
4.4. Динамическое связывание
Рассмотрим следующий код .
Пример 4.4. Процедурный вариант программы, демонстрирующей ра-
боту об об щенных алгоритмов .
program TestAlgorithm;
{$APPTYPE CONSOLE}
uses
UnitAlgorithms, // здесь находятся обобщенные алгоритмы
UnitNumber, // необходим для выполнения повышения типа
UnitRational; // необходим для создания реальных переменных
result.TypeNameIs:=TypeNameIs; // result.Destroy:=Destroy; // result.Plus:=Plus; // result.Minus:=Minus; // процедурным указателям result.Dot:=Dot; // присваиваются адреса result.Slash:=Slash; // конкретных подпрограмм result.Add:=Add; // result.Subtract:=Subtract; // result.MultiplyBy:=MultiplyBy; // result.DivideBy:=DivideBy; // result.Normalize:=Normalize; // result.Reduce:=Reduce; // result.num:=0; // числовые поля инициализируются result.den:=1; // корректными значениями end; function CreateAs(n, m: Integer): PRational; begin if m<>0 then begin // знаменатель должен быть положителен result:=UnitRational.Create; // вызов функции, определенной выше result.num:=n; result.den:=m; end else raise Exception.Create('Illegal value of denominator'); end; Зд ес ь уже ад рес а под програм м с опос т ав л яют с я в с ем указ ат ел ям , т ак что нез ам ещенны хабс т ракт ны хм етод ов не ос т ает с я. Кром е э того, инициал из иров ат ь приход ит с я т акже и чис л ов ы е пол я. Как и ранее, д л я уд обс т в а д обав л яет с я еще од ин конс т руктор — CreateAs. 4.4. Д инамическо е связы вание Рас с м от рим с л ед ующий код . Пример 4.4. Процед урны й в ариант програм м ы , д ем онс т рирующей ра- бот у обобщенны хал горит м ов . program TestAlgorithm; {$APPTYPE CONSOLE} uses UnitAlgorithms, // здесь находятся обобщенные алгоритмы UnitNumber, // необходим для выполнения повышения типа UnitRational; // необходим для создания реальных переменных 66
Страницы
- « первая
- ‹ предыдущая
- …
- 64
- 65
- 66
- 67
- 68
- …
- следующая ›
- последняя »