ВУЗ:
Составители:
Рубрика:
Объектно-ориентированное программирование на С++
Когда операндами являются объекты разных классов (например,
перемножение вектора и матрицы), то можно реализовать перегрузку
одним из двух способов:
• создать внешнюю функцию и сделать ее дружественной для
обоих классов (функция будет иметь два параметра);
• перегрузить функцию в классе первого операнда, а во втором
классе объявить ее дружественной. В этом случае функция
будет иметь один параметр – второй операнд операции.
Перегрузка унарных операций аналогична перегрузке бинарных
операций за исключением того, что она происходит не с двумя, а с одним
операндом. В связи с этим при перегрузке унарной операции в классе этот
метод не имеет параметров. Объект, вызывающий операцию, будет
являться ее единственным операндом.
В качестве примера перегрузим операции "!" и "~" для класса
Matrix. Операция "!" будет выполнять транспонирование матрицы, а
операция "~" – получение обратной матрицы.
// перегрузка операции "!" - транспонирование матрицы
Matrix Matrix::operator !()
{
Matrix temp(n, m);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
temp.a[j][i] = a[i][j];
return temp;
}
Для вычисления обратной матрицы предполагаем, что в классе
Matrix разработаны методы вычисления определителя квадратной
матрицы Determinant() и получения ее подматрицы, путем удаления
заданных строки и столбца SubMatrix().
// перегрузка операции "~" - получение обратной матрицы
Matrix Matrix::operator ~()
{
// если матрица неквадратная, то обратной матрицы
// не существует
if(n != m)
throw 1;
Matrix res(n, n);
// вычисление определителя матрицы
double det = Determinant();
// если определитель матрицы равен 0,
83
Объектно-ориентированное программирование на С++
Когда операндами являются объекты разных классов (например,
перемножение вектора и матрицы), то можно реализовать перегрузку
одним из двух способов:
• создать внешнюю функцию и сделать ее дружественной для
обоих классов (функция будет иметь два параметра);
• перегрузить функцию в классе первого операнда, а во втором
классе объявить ее дружественной. В этом случае функция
будет иметь один параметр – второй операнд операции.
Перегрузка унарных операций аналогична перегрузке бинарных
операций за исключением того, что она происходит не с двумя, а с одним
операндом. В связи с этим при перегрузке унарной операции в классе этот
метод не имеет параметров. Объект, вызывающий операцию, будет
являться ее единственным операндом.
В качестве примера перегрузим операции "!" и "~" для класса
Matrix. Операция "!" будет выполнять транспонирование матрицы, а
операция "~" – получение обратной матрицы.
// перегрузка операции "!" - транспонирование матрицы
Matrix Matrix::operator !()
{
Matrix temp(n, m);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
temp.a[j][i] = a[i][j];
return temp;
}
Для вычисления обратной матрицы предполагаем, что в классе
Matrix разработаны методы вычисления определителя квадратной
матрицы Determinant() и получения ее подматрицы, путем удаления
заданных строки и столбца SubMatrix().
// перегрузка операции "~" - получение обратной матрицы
Matrix Matrix::operator ~()
{
// если матрица неквадратная, то обратной матрицы
// не существует
if(n != m)
throw 1;
Matrix res(n, n);
// вычисление определителя матрицы
double det = Determinant();
// если определитель матрицы равен 0,
83
Страницы
- « первая
- ‹ предыдущая
- …
- 81
- 82
- 83
- 84
- 85
- …
- следующая ›
- последняя »
