Вопросы с тегом «operator-overloading»

Перегрузка операторов - это функция языка программирования, которая позволяет настраивать реализации операторов в зависимости от типов задействованных операндов. Некоторые языки позволяют определять новые операторы, в то время как другие позволяют только переопределение существующих.

2145
Каковы основные правила и идиомы для перегрузки операторов?

Примечание. Ответы были даны в определенном порядке , но поскольку многие пользователи сортируют ответы по голосам, а не по времени, в которое они были даны, вот индекс ответов в том порядке, в котором они имеют наибольшее значение: Общий синтаксис перегрузки операторов в C ++ Три основных правила...

407
Почему Java не предлагает перегрузку операторов?

Переходя от C ++ к Java, очевидный вопрос без ответа состоит в том, почему Java не включает перегрузку операторов? Не Complex a, b, c; a = b + c;намного ли проще, чем Complex a, b, c; a = b.add(c);? Есть известная причина этого веские аргументы для не позволяя перегружать оператор? Причина...

389
Контейнеры Pretty-print C ++ STL

Пожалуйста, обратите внимание на обновления в конце этого поста. Обновление: я создал публичный проект на GitHub для этой библиотеки! Я хотел бы иметь один шаблон, который раз и навсегда позаботится о красивой печати через все контейнеры STL operator<<. В псевдокоде я ищу что-то вроде этого:...

292
Являются ли == и! = Взаимозависимыми?

Я учусь о перегрузках операторов в C ++, и я вижу , что ==и !=просто некоторые специальные функции , которые могут быть настроены для определенного пользователя типов. Однако меня беспокоит, почему нужны два отдельных определения? Я думал, что если a == bэто правда, то a != bавтоматически ложно, и...

254
Как перегрузить оператор квадратной скобки в C #?

DataGridView, например, позволяет вам сделать это: DataGridView dgv = ...; DataGridViewCell cell = dgv[1,5]; но я не могу найти документацию по оператору index / квадратные скобки. Как они это называют? Где это реализовано? Это может бросить? Как я могу сделать то же самое в моих собственных...

237
Как правильно перегрузить оператор << для ostream?

Я пишу небольшую матричную библиотеку на C ++ для матричных операций. Однако мой компилятор жалуется, где раньше этого не было. Этот код оставлялся на полке в течение 6 месяцев, и между тем я обновил свой компьютер с debian etch до lenny (g ++ (Debian 4.3.2-1.1) 4.3.2), однако у меня та же проблема...

174
Перегрузка операторов методами расширения C #

Я пытаюсь использовать методы расширения для добавления перегрузки оператора в StringBuilderкласс C # . В частности, учитывая StringBuilder sb, я хотел бы sb += "text"стать эквивалентным sb.Append("text"). Вот синтаксис для создания метода расширения для StringBuilder: public static class...

170
Как я могу надежно получить адрес объекта, когда оператор & перегружен?

Рассмотрим следующую программу: struct ghost { // ghosts like to pretend that they don't exist ghost* operator&() const volatile { return 0; } }; int main() { ghost clyde; ghost* clydes_address = &clyde; // darn; that's not clyde's address :'( } Как я могу получить clydeадрес? Я ищу...

155
Что делает перегрузку оператора Scala «хорошей», а «плохой» в C ++?

Многие считают, что перегрузка операторов в C ++ является «плохой вещью» (tm), и это ошибка, которую нельзя повторять на более новых языках. Конечно, это была одна особенность, специально упущенная при разработке Java. Теперь, когда я начал читать Scala, я обнаружил, что он имеет то, что очень...

138
Есть ли причина, по которой && и || перегружены? не закорачивайте?

Короткое замыкание поведение операторов &&и ||удивительный инструмент для программистов. Но почему они теряют это поведение при перегрузке? Я понимаю, что операторы - это просто синтаксический сахар для функций, но операторы для boolимеют такое поведение, почему оно должно быть ограничено...

130
Перегрузка операторов доступа к членам ->,. *

Я понимаю , большинство перегрузки операторов, за исключением операторов доступа члена ->, .*, и ->*т.д. В частности, что передается этим операторным функциям, а что нужно возвращать? Как операторная функция (например operator->(...)) узнает, на какой член ссылается? Это может знать? Это...

129
Должен ли оператор << быть реализован как друг или как функция-член?

Это в основном вопрос, есть ли «правильный» способ реализации operator<<? Читая это, я вижу что-то вроде: friend bool operator<<(obj const& lhs, obj const& rhs); предпочтительнее чем-то вроде ostream& operator<<(obj const& rhs); Но я не совсем понимаю, почему я...

121
Перегрузка оператора: функция-член или функция-не-член?

Я читал, что перегруженный оператор, объявленный как функция-член, является асимметричным, потому что он может иметь только один параметр, а другой параметр, передаваемый автоматически, является thisуказателем. Так что не существует стандарта для их сравнения. С другой стороны, перегруженный...

114
Как проверить наличие нулей в перегрузке оператора '==' без бесконечной рекурсии?

Следующее вызовет бесконечную рекурсию в методе перегрузки оператора ==. Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; return foo1.Equals(foo2); } Как проверить наличие...

114
Перегрузка оператора C # для `+ =`?

Я пытаюсь выполнить перегрузку оператора +=, но не могу. Могу сделать только перегрузку оператора для +. Как придешь? редактировать Причина, по которой это не работает, заключается в том, что у меня есть класс Vector (с полями X и Y). Рассмотрим следующий пример. vector1 += vector2; Если моя...

109
Есть ли способ выполнить перегрузку метода в TypeScript?

Есть ли способ выполнить перегрузку метода на языке TypeScript? Я хочу добиться чего-то вроде этого: class TestClass { someMethod(stringParameter: string): void { alert("Variant #1: stringParameter = " + stringParameter); } someMethod(numberParameter: number, stringParameter: string): void {...