ВУЗ:
Составители:
Рубрика:
62
type Matrix = array[1..n,1..n] of PNumber; // элементы матрицы -
// ссылки на записи
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
implementation
function AddMatrix(m1, m2: Matrix): Matrix;
var i,j: Integer;
begin
for i:=1 to n do for j:=1 to n do
result[i,j]:=m1[i,j].Plus(m1[i,j], m2[i,j]);
{ Вызывается подпрограмма, адресуемая полем Plus записи m1[i,j].
Ей в качестве параметров передаются объекты m1[i,j] и m2[i,j]. }
end;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: PNumber;
begin
for i:=1 to n do for j:=1 to n do begin
result[i,j]:=m1[i,1].Dot(m1[i,1],m2[1,j]);
for k:=2 to n do begin
p:=m1[i,k].Dot(m1[i,k],m2[k,j]);
result[i,j].Add(result[i,j],p);
p.Destroy(p);
end;
end;
end;
end.
Как это ни удивительно, код модуля почти не изменился. Самое
существенное отличие состоит в том , что имя объекта, для которого в ы -
зывается метод , приходится повторять дважды. Первый раз оно испол ь -
зуется для определения адреса конкретной подпрограммы, второй — как
параметр этой подпрограммы. Вспомним , что в объектной модели пер-
вый параметр передается методу автоматически под именем self.
4.3. Наследование
В примере 4.1 обращает на себя внимание то, как часто в исход -
ном тексте фигурируют указатели. И элементы матриц, и поля объектов
содержат значения, которые могут быть адресами чего угодно. На самом
type Matrix = array[1..n,1..n] of PNumber; // элементы матрицы -
// ссылки на записи
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
implementation
function AddMatrix(m1, m2: Matrix): Matrix;
var i,j: Integer;
begin
for i:=1 to n do for j:=1 to n do
result[i,j]:=m1[i,j].Plus(m1[i,j], m2[i,j]);
{ Вызывается подпрограмма, адресуемая полем Plus записи m1[i,j].
Ей в качестве параметров передаются объекты m1[i,j] и m2[i,j]. }
end;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: PNumber;
begin
for i:=1 to n do for j:=1 to n do begin
result[i,j]:=m1[i,1].Dot(m1[i,1],m2[1,j]);
for k:=2 to n do begin
p:=m1[i,k].Dot(m1[i,k],m2[k,j]);
result[i,j].Add(result[i,j],p);
p.Destroy(p);
end;
end;
end;
end.
Как э то ни уд ив ит ел ь но, код м од ул я почт и не из м енил с я. Сам ое
с ущес т в енное отл ичие с ос т оит в том , чтоим я объект а, д л я которогов ы -
з ы в ает с я м етод , приход ит с я пов торят ь д в ажд ы . Перв ы й раз оноис пол ь -
з ует с я д л я опред ел ения ад рес а конкрет ной под програм м ы , в торой — как
парам ет р э той под програм м ы . Вс пом ним , чтов объект ной м од ел и пер-
в ы й парам ет р перед ает с я м етод у ав том ат ичес ки под им енем self.
4.3. Н аследование
В прим ере 4.1 обращает на с ебя в ним ание то, как час то в ис ход -
ном т екс т е фигурируют указ ат ел и. И эл ем ент ы м ат риц, и пол я объектов
с од ержат з начения, которы е м огут бы т ь ад рес ам и чегоугод но. Н а с ам ом
62
Страницы
- « первая
- ‹ предыдущая
- …
- 60
- 61
- 62
- 63
- 64
- …
- следующая ›
- последняя »
