Ключевое слово operator
Ключевое слово operator используется для перегрузки операторов. Перегрузка операторов позволяет задать новое поведение для стандартных операций (таких как сложение, сравнение, индексация) применительно к объектам пользовательских классов. Синтаксис перегрузки позволяет указать, как именно должен работать оператор: в первом параметре для бинарных операторов передается левый операнд, а во втором - правый. Для унарных операторов параметр один.
Синтаксис
// Перегрузка внутри класса
return_type operator symbol (parameters)
{
// тело оператора
}
// Перегрузка вне класса (глобальная функция)
return_type operator symbol (parameters)
{
// тело оператора
}
Пример
Давайте создадим класс Point, представляющий точку на плоскости, и перегрузим оператор + для сложения двух точек. Координаты будут суммироваться:
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
Point(int x, int y) : x(x), y(y) {}
// Перегрузка оператора +
Point operator+(const Point& other) {
return Point(x + other.x, y + other.y);
}
};
int main()
{
Point p1(1, 2);
Point p2(3, 4);
Point p3 = p1 + p2;
cout << p3.x << " " << p3.y << endl;
return 0;
}
Результат выполнения кода:
4 6
Пример
Давайте перегрузим оператор == для сравнения двух объектов класса Point. Это позволит использовать привычный синтаксис сравнения:
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
Point(int x, int y) : x(x), y(y) {}
// Перегрузка оператора ==
bool operator==(const Point& other) {
return (x == other.x && y == other.y);
}
};
int main()
{
Point p1(1, 2);
Point p2(1, 2);
Point p3(3, 4);
if (p1 == p2) {
cout << "p1 and p2 are equal" << endl;
}
if (!(p1 == p3)) {
cout << "p1 and p3 are not equal" << endl;
}
return 0;
}
Результат выполнения кода:
"p1 and p2 are equal"
"p1 and p3 are not equal"
Смотрите также
-
ключевое слово
this,
которое указывает на текущий объект класса -
ключевое слово
friend,
которое дает доступ к приватным членам класса -
ключевое слово
explicit,
которое запрещает неявное преобразование типов -
ключевое слово
constructor,
который инициализирует объекты класса