170 похожих чатов

Мне нужно разбираться в этой теме. Заметил свою логическую ошибку. Запутался

в определениях. Значит, согласно здравому смыслу, унарный оператор работает только с одним объектом.

Всё перегрузил правильно, у унарного плюса нет параметров в перегрузке.

Но мне остаётся неясным. Вот у меня два бинарных оператора — + и ==. В первом случае я могу воспользоваться this, но во-втором, во всех примерах, которые я встречал, мне попадается версия перегрузки с двумя параметрами. Вот я никак не могу понять разницу, можно ли использовать для == один параметр?

P.S. не совсем понимаю, что значит member.
P.S.S. почему у этой перегрузки есть доступ к приватным полям, если она не friend?

10 ответов

19 просмотров

Для == использовать один параметр можно, пример: #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 - функция-член класса у функции-члена есть доступ к приватным полям класса

disba1ancer
так формально параметра всё равно 2

я понимаю, в контексте разговора неявный this не учитываем

смкх
я понимаю, в контексте разговора неявный this не у...

для операторов он очень даже явный, при вызове

Владимир- Автор вопроса
disba1ancer
так формально параметра всё равно 2

Да, об этом и речь. Почему то во всех примерах, которые я видел, именно операторы сравнения == перегружают через два явных параметра, хотя, как теперь мне стало понятно, this никуда не делся. Это излишне? Или наоборот удобнее? Или просто совпадение?

Просто есть небольшая условность, какие операторы какими функциями перегружать(методами, дружественными или обычными). К примеру (), [] обычно перегружаются методами, а бинарные операторы, которые не изменяют левый операнд, дружественными/обычными функциями. Но жестких требований к определенным операторам может не быть

Владимир
Да, об этом и речь. Почему то во всех примерах, ко...

оператор == можно определить как член класса, в этом случае в объявлении и определении будет только один аргумент, правый операнд, а левым операндом будет не явный this; либо можно определить как свободную функцию и тогда неявного this там не будет, а будет 2 явных аргумента, левый и правый операнды

Denys Khodakov
Просто есть небольшая условность, какие операторы ...

скобки в принципе свободными функциями не перегрузить

disba1ancer
для операторов он очень даже явный, при вызове

При вызове аргумент. Параметр в сигнатуре.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта