Как глобально перегрузить оператор opAssign в C++

Просто интересно, как их перегрузить.

Операторы opAssign похожи на addAssign(+=) и subAssign(-=).

«глобально» означает, что они не перегружены как функции-члены, а просто оператор действует на операнды

Для этих операторов opAssign они являются бинарными операторами (они получают два операнда). Поэтому необходимы два параметра.

Я не нашел примеров в Интернете.....


person Community    schedule 04.10.2009    source источник


Ответы (2)


Вот тривиальный пример определения operator+=:

struct Foo{
    int x;
};

Foo& operator+=(Foo& lhs, const Foo& rhs) {
    lhs.x += rhs.x;
    return lhs;
}
person sepp2k    schedule 04.10.2009

Оператор присваивания (=) отличается тем, что он всегда должен быть нестатической функцией-членом в соответствии с «§13.5.3 Присваивание» стандарта C++.

Оператор присваивания должен быть реализован нестатической функцией-членом ровно с одним параметром.

То же самое верно для оператора вызова функции и оператора индекса. Другие операторы «присваивания» (+=, -=, *= и т. д.) могут быть свободными бинарными функциями.

person sellibitze    schedule 04.10.2009
comment
ASFAIU Bossliaw спрашивал об операторах, которые объединяют присваивание с какой-либо другой операцией (+= и т. д.), а не о чистом присваивании (=). - person sbi; 05.10.2009