ВУЗ:
Составители:
Рубрика:
Объектно-ориентированное программирование на С++
Однако значительно удобнее использовать более естественное
обращение к операции:
. . .
Matrix a(2,3), b(3,4);
a.InputMatrix();
b.InputMatrix();
Matrix c = a * b;
. . .
Для умножения матрицы на число должна быть перегружена
операция "*", она также будет бинарной, но будет отличаться типом
второго операнда:
// операция умножения матрицы на число
Matrix Matrix::operator * (double b)
{
Matrix temp(m, n);
// заполнение матрицы-результата
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
temp.a[i][j] = a[i][j] * b;
return temp;
}
Если при обращении к операции умножения второй операнд будет
являться числовой константой или переменной числового типа, будет
вызываться последняя реализация перегруженной операции.
. . .
Matrix a(2,3);
a.InputMatrix();
Matrix c = a * 5; // эквивалентное обращение
// Matrix c = a.operator*(5);
. . .
Однако обращение к операции умножения в случае, когда число
является первым операндом, пока невозможно. Поэтому имеет смысл
перегрузить операцию "*" для случая, когда первый операнд является
числом, а второй – матрицей. Но для этого нельзя использовать
операторную функцию, которая является методом класса, поскольку для
нее первым операндом обязательно должен быть объект класса.
В таких случаях перегрузка операций осуществляется с помощью
внешних по отношению к классу функций. Такая функция не является
81
Объектно-ориентированное программирование на С++
Однако значительно удобнее использовать более естественное
обращение к операции:
. . .
Matrix a(2,3), b(3,4);
a.InputMatrix();
b.InputMatrix();
Matrix c = a * b;
. . .
Для умножения матрицы на число должна быть перегружена
операция "*", она также будет бинарной, но будет отличаться типом
второго операнда:
// операция умножения матрицы на число
Matrix Matrix::operator * (double b)
{
Matrix temp(m, n);
// заполнение матрицы-результата
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
temp.a[i][j] = a[i][j] * b;
return temp;
}
Если при обращении к операции умножения второй операнд будет
являться числовой константой или переменной числового типа, будет
вызываться последняя реализация перегруженной операции.
. . .
Matrix a(2,3);
a.InputMatrix();
Matrix c = a * 5; // эквивалентное обращение
// Matrix c = a.operator*(5);
. . .
Однако обращение к операции умножения в случае, когда число
является первым операндом, пока невозможно. Поэтому имеет смысл
перегрузить операцию "*" для случая, когда первый операнд является
числом, а второй – матрицей. Но для этого нельзя использовать
операторную функцию, которая является методом класса, поскольку для
нее первым операндом обязательно должен быть объект класса.
В таких случаях перегрузка операций осуществляется с помощью
внешних по отношению к классу функций. Такая функция не является
81
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »
