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

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

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

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

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

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

10 ответов

17 просмотров

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

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта