Программная инженерия Нижний Новгород 017 Лабораторный


Download 1.23 Mb.
Pdf ko'rish
bet29/87
Sana08.06.2023
Hajmi1.23 Mb.
#1463900
TuriУчебно-методическое пособие
1   ...   25   26   27   28   29   30   31   32   ...   87
Bog'liq
Pract ADS

3.4.2. 
Матрица 
template
TMatrix& TMatrix::operator=( 
const TMatrix &mt) 

if (this != &mt) 

if (Size != mt.Size) 

delete[] pVector; 
pVector = new TVector[mt.Size]; 

Size = mt.Size;
StartIndex = mt.StartIndex; 
for (int i = 0; i < Size; i++) 
pVector[i] = mt.pVector[i]; 

return *this; 
}
Комментарии: 

матрица хранится как вектор векторов переменной длины. В поле 
pVector
каждая 
ячейка хранит указатель на объект класса Вектор

строка 
pVector = new TVector[mt.Size];

выделяет участок памяти для 
mt.Size
объектов класса Век тор  (при этом для 
каждого из них при создании используется конструктор с параметрами по 
умолчанию, устанавливающий размер вектора равный 10); 

строка в цикле 
pVector[i] = mt.pVector[i];
для каждого созданного объекта-вектора вызывает его оператор присваивания
который установит правильный размер и скопирует элементы. 
Нетрудно заметить, что реализация методов присваивания для вектора и матрицы 
совпадает с точностью до обозначений, за исключением одной строки, выделяющей память 
под новое количество элементов поля pVector. 
Посмотрим теперь на реализацию метода сложения векторов. 
template
TVector TVector::operator+(const TVector &v) 

TVector temp(Size, StartIndex);


 
33 
for (int i = 0; i < Size; i++) 
temp.pVector[i] = pVector[i] + v.pVector[i]; 
return temp;
}
Выбранный нами ранее способ определения матрицы как вектора векторных элементов 
позволяет сделать следующее 
Утверждение 
Пусть матрица A = (a
i
), где a
i
– вектор из i элементов, матрица B = (b
i
), где b
i
– вектор из i 
элементов, тогда результатом сложения матриц A и B будет матрица C = (c
i
), где c
i
– вектор из 
i элементов и c
i
= a

+ b

при всех i = 1..n. 
Истинность данного утверждения нетрудно показать. Также очевидно, что полученный 
способ вычисления суммы матриц совпадает с данным в разделе 2 определением суммы 
векторов. Таким образом, должны совпадать реализации методов сложения для класса 
Вектор и класса Матрица, с той лишь разницей, что операция 
temp.pVector[i] = pVector[i] + v.pVector[i]; 
в случае сложения векторов суммирует скаляры, а в случае сложения матриц должна 
суммировать вектора. 
В результате, реализация метода сложения матриц может быть записана следующим 
образом: 
template
TMatrix TMatrix::operator+(const TMatrix &mt) 

return TVector >::operator+(mt);
}

Download 1.23 Mb.

Do'stlaringiz bilan baham:
1   ...   25   26   27   28   29   30   31   32   ...   87




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling