На этом шаге мы рассмотрим второй способ перегрузки стандартных операций: описание
операции-функции как дружественной.
Проиллюстрируем особенности оформления операции-функции в виде дружественной функции класса. Для полноты изложения выполним перегрузку не бинарной, а унарной операции. Введем класс "радиус-вектор 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
На следующем шаге мы начнем подводить итоги перегрузки операций.