Шаг 18.
Перегрузка стандартных операций. Дружественная функция

    На этом шаге мы рассмотрим второй способ перегрузки стандартных операций: описание операции-функции как дружественной.

    Проиллюстрируем особенности оформления операции-функции в виде дружественной функции класса. Для полноты изложения выполним перегрузку не бинарной, а унарной операции. Введем класс "радиус-вектор N-мерного пространства" и определим для него операцию-функцию "-", изменяющую направление вектора на противоположное.

//OOР18_1.СРР - операция-функция как дружественная функция.
#include <iostream.h>
// Класс  "радиус-вектор":
class vector
{  int N; // Размерность  пространства.
   double *x; // Указатель на массив координат.
  //  Прототип  операции-функции: 
  friend vector& operator - (vector &);
 public:
  vector (int n,  double  *xn)   // Конструктор.
     { N = n; x = xn; }
  // Компонентная функция печати вектора:
  void display ();
};
// Определение компонентной функции: 
void vector::display() 
{ cout << "\nКоординаты вектора:"; 
  for (int i = 0; i < N; i++)
  cout << "\t" << x[i]; 
} 
// Определение операции-функции:
vector& operator - (vector & v) 
{ for (int i = 0; i < v.N; i++)
       v.x[i] = -v.x[i]; 
  return v;
}
void main()	// Иллюстрирующая программа.
{ // Определяем массив:
  double A[] = { 1.0, 2.0, 3.0, 4.0 };
  vector V(4,A); // Создан объект класса vector.
  V.display();   // Вывод на экран.
  V = -V;        // Перегруженная операция.
  V.display();   // Вывод на экран.
}
Текст этой программы можно взять здесь.

    Результат выполнения программы:

Координаты вектора:      1      2      3       4 
Координаты вектора:      -1     -2     -3      -4

    На следующем шаге мы начнем подводить итоги перегрузки операций.




Предыдущий шаг Содержание Следующий шаг