ВУЗ:
Составители:
Рубрика:
Объектно-ориентированное программирование на С++
// операция присваивания матриц
Matrix& Matrix::operator = (Matrix& ob)
{
if(n != ob.n || m != ob.m)
{
// освобождение памяти в левом операнде
for(int i = 0; i < m; i++)
delete [] a[i];
delete [] a;
// выделение памяти в левом операнде
n = ob.n;
m = ob.m;
a = new double* [m];
for(int i = 0; i < m; i++)
a[i] = new double [n];
}
// копирование данных правого операнда в левый
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
a[i][j] = ob.a[i][j];
return *this;
}
Результатом оператора присваивания является левый операнд. При
такой реализации возможно следующее его использование:
. . .
Matrix a(2,2), b(2,2), c(2,2);
a.InputMatrix();
c = b = a;
c.OutputMatrix();
. . .
В данном случае матрицы b и c будут содержать те же данные, что и
матрица а.
Отметим, что оператор присваивания по своей реализации
аналогичен конструктору копирования. Отличие состоит в том, что
конструктор копирования выполняется в момент создания объекта-копии,
а оператор присваивания используется для существующих объектов.
Перегрузка операций ввода/вывода.
В С++ ввод и вывод выполняется с помощью специальных операций
потокового ввода/вывода, использование которых мы рассматривали в
разделе 1.1. Эти же операции можно использовать и для организации
ввода/вывода объектов пользовательских типов данных. Это
осуществляется с помощью их перегрузки.
85
Объектно-ориентированное программирование на С++
// операция присваивания матриц
Matrix& Matrix::operator = (Matrix& ob)
{
if(n != ob.n || m != ob.m)
{
// освобождение памяти в левом операнде
for(int i = 0; i < m; i++)
delete [] a[i];
delete [] a;
// выделение памяти в левом операнде
n = ob.n;
m = ob.m;
a = new double* [m];
for(int i = 0; i < m; i++)
a[i] = new double [n];
}
// копирование данных правого операнда в левый
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
a[i][j] = ob.a[i][j];
return *this;
}
Результатом оператора присваивания является левый операнд. При
такой реализации возможно следующее его использование:
. . .
Matrix a(2,2), b(2,2), c(2,2);
a.InputMatrix();
c = b = a;
c.OutputMatrix();
. . .
В данном случае матрицы b и c будут содержать те же данные, что и
матрица а.
Отметим, что оператор присваивания по своей реализации
аналогичен конструктору копирования. Отличие состоит в том, что
конструктор копирования выполняется в момент создания объекта-копии,
а оператор присваивания используется для существующих объектов.
Перегрузка операций ввода/вывода.
В С++ ввод и вывод выполняется с помощью специальных операций
потокового ввода/вывода, использование которых мы рассматривали в
разделе 1.1. Эти же операции можно использовать и для организации
ввода/вывода объектов пользовательских типов данных. Это
осуществляется с помощью их перегрузки.
85
Страницы
- « первая
- ‹ предыдущая
- …
- 83
- 84
- 85
- 86
- 87
- …
- следующая ›
- последняя »
