Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
Всем привет! Решил свой предыдущий топик разбросать на несколько топиков, так как там много вопросов накопилось, и видимо никто уже не хочет отвечать :). Мой вопрос следующий: Существует ли какое-либо соглашение, или просто практика, которая говорит о том, что для оператора "+" нужны два операнда? А если нужно произвести действия над непосредственно объектом (то есть один операнд), то нужно использовать оператор "++"? Или как я захочу, так я и переопределю "+", с одним или двумя операндами? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 14:20 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, задумайтесь над тем, что перегруженный оператор может быть, а может и не быть членом класса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 14:38 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
Гламурный чертMaximuS_G, задумайтесь над тем, что перегруженный оператор может быть, а может и не быть членом класса :) Что это означает? :) Может быть переопределен в классе, а может быть нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 16:33 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
MaximuS_GСуществует ли какое-либо соглашение, или просто практика, которая говорит о том, что для оператора "+" нужны два операнда? А если нужно произвести действия над непосредственно объектом (то есть один операнд), то нужно использовать оператор "++"? Или как я захочу, так я и переопределю "+", с одним или двумя операндами?Вы можете переопределять встроенные операторы, но: 1. Семантика оператора заменяется на семантику функционального вызова. В частности, будут вычислены все аргументы и порядок вычисления не гарантируется; 2. Как минимум один аргумент переопределённого оператора должен быть не встроенного типа. Скажем, operator+(int, int) - недопустим; 3. Если вы переопределили один оператор - переопределяйте и все "связанные". Скажем, ++ (обе формы), += и + - четыре разных оператора и чтобы ваши переопределения были предсказуемы, необходимо реализовать все четыре. Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2013, 18:48 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov3. Если вы переопределили один оператор - переопределяйте и все "связанные". Скажем, ++ (обе формы), += и + - четыре разных оператора и чтобы ваши переопределения были предсказуемы, необходимо реализовать все четыре. Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него. Последнее -- не требование языка, а лишь правило хорошего тона и логической целесообрезности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 14:46 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
MaximuS_GЧто это означает? :) Может быть переопределен в классе, а может быть нет? Да. Переопределение может быть сделано вне класса, с ограничениями о которых писали выше. Т.е. если вы переопределяете оператор в классе, то первым операндом является сам экземпляр, и требуется только один операнд. Если это "дружественная функция" определенная вне класса - тогда два операнда типа "класс". В очень грубой формулировке как-то так. P.S. Поищите в inet, масса примеров переопределения внутри и вовне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 15:34 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
MasterZivBasil A. Sidorov чтобы ваши переопределения были предсказуемы Последнее -- не требование языка, а лишь правило хорошего тона и логической целесообрезности.Я правильно подчеркнул себя любимого? Или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2013, 16:46 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovMaximuS_GСуществует ли какое-либо соглашение, или просто практика, которая говорит о том, что для оператора "+" нужны два операнда? А если нужно произвести действия над непосредственно объектом (то есть один операнд), то нужно использовать оператор "++"? Или как я захочу, так я и переопределю "+", с одним или двумя операндами?Вы можете переопределять встроенные операторы, но: 1. Семантика оператора заменяется на семантику функционального вызова. В частности, будут вычислены все аргументы и порядок вычисления не гарантируется; 2. Как минимум один аргумент переопределённого оператора должен быть не встроенного типа. Скажем, operator+(int, int) - недопустим; 3. Если вы переопределили один оператор - переопределяйте и все "связанные". Скажем, ++ (обе формы), += и + - четыре разных оператора и чтобы ваши переопределения были предсказуемы, необходимо реализовать все четыре. Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него. Я понял, спасибо большое! Я вот это не совсем понял: Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него. "оператор с присваиванием" иммется ввиду вот это? Код: plaintext 1. Если да, как через него реализовать оператор ++? Скажем, ++ (обе формы), += и + - четыре разных оператора А "-=" и "-" тоже нужно переопределять чтобы переопределения были предсказуемы? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 12:06 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
Гламурный чертДа. Переопределение может быть сделано вне класса, с ограничениями о которых писали выше. Т.е. если вы переопределяете оператор в классе, то первым операндом является сам экземпляр, и требуется только один операнд. Если это "дружественная функция" определенная вне класса - тогда два операнда типа "класс". Ага, я понял, что Вы имели ввиду. Спасибо! Да, я это знаю. В моем вопросе подразумевалось, что первым аргументов в любом случае передается сам экземпляр в неявном (параметр this, функция является членом класса) или явном (первый параметр функции, функция не является членом класса) виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 12:22 |
|
||
|
Переопределенный оператор "+" - сколько операндов
|
|||
|---|---|---|---|
|
#18+
MaximuS_G"оператор с присваиванием" иммется ввиду вот это? Код: plaintext 1. +=, -=, *= и т.д.Если да, как через него реализовать оператор ++?Как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. На самом деле, я цитирую "Наиболее эффективное использование C++" Скотта Мейерса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2013, 21:14 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=85&tid=2020510]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 286ms |
| total: | 474ms |

| 0 / 0 |
