в определениях. Значит, согласно здравому смыслу, унарный оператор работает только с одним объектом.
Всё перегрузил правильно, у унарного плюса нет параметров в перегрузке.
Но мне остаётся неясным. Вот у меня два бинарных оператора — + и ==. В первом случае я могу воспользоваться this, но во-втором, во всех примерах, которые я встречал, мне попадается версия перегрузки с двумя параметрами. Вот я никак не могу понять разницу, можно ли использовать для == один параметр?
P.S. не совсем понимаю, что значит member.
P.S.S. почему у этой перегрузки есть доступ к приватным полям, если она не friend?
Для == использовать один параметр можно, пример: #include <iostream> struct A { int field; bool operator==(const A& other) { return field == other.field; } }; int main() { A a{1}, b{2}; std::cout << (a == b); } Все вполне также будет работать. member - функция-член класса у функции-члена есть доступ к приватным полям класса
так формально параметра всё равно 2
я понимаю, в контексте разговора неявный this не учитываем
для операторов он очень даже явный, при вызове
Да, об этом и речь. Почему то во всех примерах, которые я видел, именно операторы сравнения == перегружают через два явных параметра, хотя, как теперь мне стало понятно, this никуда не делся. Это излишне? Или наоборот удобнее? Или просто совпадение?
Просто есть небольшая условность, какие операторы какими функциями перегружать(методами, дружественными или обычными). К примеру (), [] обычно перегружаются методами, а бинарные операторы, которые не изменяют левый операнд, дружественными/обычными функциями. Но жестких требований к определенным операторам может не быть
оператор == можно определить как член класса, в этом случае в объявлении и определении будет только один аргумент, правый операнд, а левым операндом будет не явный this; либо можно определить как свободную функцию и тогда неявного this там не будет, а будет 2 явных аргумента, левый и правый операнды
скобки в принципе свободными функциями не перегрузить
Я в общем идею описываю. А так да
При вызове аргумент. Параметр в сигнатуре.
Обсуждают сегодня