Перезагрузка операторов — одна из наиболее важных функций языка С++. Благодаря этой функции можно оприделить действия, которые будут выполняться при выполнений заданных операций с объектами.
В общем виде перегрузка оператор происходит так
тип имя_класса :: 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; }
Функция увеличит все значения координат в объекте и вернёт его.