Перезагрузка операторов — одна из наиболее важных функций языка С++. Благодаря этой функции можно оприделить действия, которые будут выполняться при выполнений заданных операций с объектами.
В общем виде перегрузка оператор происходит так
тип имя_класса :: operator # {
операции
}
- # — указывает на оператор, который будет перезагружен
Для примера создадим объект, который содержит координаты трёхмерной системы и укажем правила для операторов «+» и «=».
#include <iostream>
using namespace std;
class ThreeD {
int x, y, z;
public:
ThreeD () {x=y=z=0;}
ThreeD (int i, int j, int k) { x = i; y = j; z = k; }
/* задаём перегрузку операторов неявно */
ThreeD operator+(ThreeD op2);
ThreeD operator=(ThreeD op2);
/* функция для вывода значений на экран */
void show();
}
ThreeD ThreeD::operator+(ThreeD op2){
ThreeD temp;
/* при выполнении операции сложения с объектом складываем его соответствующи координаты */
/* под x подрозумеваются координаты объекта инициализировавшого операцию (this->x) */
temp.x = x + op2.x;
temp.y = y + op2.y;
temp.z = z + op2.z;
/* возвращается результат сложения координат. Функция не модифицирует исходных значений!! */
return temp;
}
ThreeD ThreeD::operator=(ThreeD op2){
x = op2.x; // При выполнении операции присваивания
y = op2.y; // целочисленных значений сохраняется
z = op2.z; // оригинальный смысл оператора "=".
return *this;
}
void ThreeD::show (){
cout << x << ", ";
cout << y << ", ";
cout << z << "\n";
}
int main(){
ThreeD a(1, 2, 3) , b(10, 10, 10), c;
cout << "Исходные значения координат объекта а: ";
a.show() ;
cout << "Исходные значения координат объекта b: ";
b.show();
cout << "\n";
c = a + b; // сложение объектов а и b
cout << "Значения координат объекта с после с = а + b: ";
c.show();
cout << "\n";
c = a + b + c; // сложение объектов а, Ь и с
cout << "Значения координат объекта с после с = а + b + с :";
c.show();
cout << "\n";
c = b = a; // демонстрация множественного присваивания
cout << "Значения координат объекта с после с = b = а: ";
c.show();
cout << "Значения координат объекта b после с = b = а: ";
b.show ();
return 0;
}
Вывод программы такой:
Исходные значения координат объекта а: 1, 2, 3 Исходные значения координат объекта b: 10, 10, 10 Значения координат объекта с после с = а + b: 11, 12, 13 Значения координат объекта с после с = а + b + с :22, 24, 26 Значения координат объекта с после с = b = а: 1, 2, 3 Значения координат объекта b после с = b = а: 1, 2, 3
Таким образом вы видите, задав подобные правило можно существенно упростить работу по объединению/сравниванию данных нескольких объектов.
P.S. Перегружать можно любые операторы. Вот пример префиксного инкремента:
ThreeD ThreeD::operator++() {
x++;
y++;
z++;
return *this;
}
Функция увеличит все значения координат в объекте и вернёт его.







