Перегрузка операторов
Свои типы, которые ведут себя как встроенные
После урока ты сможешь
- Перегружать арифметику и сравнение для своих типов
- Получать все сравнения сразу через <=>
- Выводить свой тип через std::format
Шаг 1 из 6
Свои типы, которые ведут себя как встроенные
std::string можно складывать через + и сравнивать через ==. Это не магия компилятора: в стандартной библиотеке для строк перегружены операторы. То же можно сделать для своих типов, и код станет читаться как математика:
#include <print>
struct Vec2 {
double x = 0;
double y = 0;
};
Vec2 operator+(Vec2 a, Vec2 b) {
return {a.x + b.x, a.y + b.y};
}
Vec2 operator*(Vec2 v, double k) {
return {v.x * k, v.y * k};
}
int main() {
const Vec2 position{1, 2};
const Vec2 velocity{0.5, -1};
const Vec2 next = position + velocity * 2;
std::println("({}, {})", next.x, next.y);
}
Оператор — это функция с особым именем: operator+, operator*, operator==. Выражение a + b компилятор превращает в вызов operator+(a, b).