Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переопределенный оператор "+" - сколько операндов / 11 сообщений из 11, страница 1 из 1
15.01.2013, 14:20
    #38110716
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
Всем привет!
Решил свой предыдущий топик разбросать на несколько топиков, так как там много вопросов накопилось, и видимо никто уже не хочет отвечать :).
Мой вопрос следующий:
Существует ли какое-либо соглашение, или просто практика, которая говорит о том, что для оператора "+" нужны два операнда? А если нужно произвести действия над непосредственно объектом (то есть один операнд), то нужно использовать оператор "++"?
Или как я захочу, так я и переопределю "+", с одним или двумя операндами?
Заранее спасибо!
...
Рейтинг: 0 / 0
15.01.2013, 14:38
    #38110741
Гламурный черт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
MaximuS_G,

задумайтесь над тем, что перегруженный оператор может быть, а может и не быть членом класса :)
...
Рейтинг: 0 / 0
15.01.2013, 16:33
    #38110984
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
Гламурный чертMaximuS_G,

задумайтесь над тем, что перегруженный оператор может быть, а может и не быть членом класса :)
Что это означает? :) Может быть переопределен в классе, а может быть нет?
...
Рейтинг: 0 / 0
15.01.2013, 18:48
    #38111264
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
MaximuS_GСуществует ли какое-либо соглашение, или просто практика, которая говорит о том, что для оператора "+" нужны два операнда? А если нужно произвести действия над непосредственно объектом (то есть один операнд), то нужно использовать оператор "++"?
Или как я захочу, так я и переопределю "+", с одним или двумя операндами?Вы можете переопределять встроенные операторы, но:
1. Семантика оператора заменяется на семантику функционального вызова. В частности, будут вычислены все аргументы и порядок вычисления не гарантируется;
2. Как минимум один аргумент переопределённого оператора должен быть не встроенного типа. Скажем, operator+(int, int) - недопустим;
3. Если вы переопределили один оператор - переопределяйте и все "связанные". Скажем, ++ (обе формы), += и + - четыре разных оператора и чтобы ваши переопределения были предсказуемы, необходимо реализовать все четыре.
Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него.
...
Рейтинг: 0 / 0
16.01.2013, 14:46
    #38112280
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
Basil A. Sidorov3. Если вы переопределили один оператор - переопределяйте и все "связанные". Скажем, ++ (обе формы), += и + - четыре разных оператора и чтобы ваши переопределения были предсказуемы, необходимо реализовать все четыре.
Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него.

Последнее -- не требование языка, а лишь правило хорошего тона и логической целесообрезности.
...
Рейтинг: 0 / 0
16.01.2013, 15:34
    #38112373
Гламурный черт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
MaximuS_GЧто это означает? :) Может быть переопределен в классе, а может быть нет?

Да. Переопределение может быть сделано вне класса, с ограничениями о которых писали выше. Т.е. если вы переопределяете оператор в классе, то первым операндом является сам
экземпляр, и требуется только один операнд. Если это "дружественная функция" определенная вне класса - тогда два операнда типа "класс". В очень грубой формулировке как-то так.

P.S. Поищите в inet, масса примеров переопределения внутри и вовне.
...
Рейтинг: 0 / 0
16.01.2013, 16:46
    #38112525
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
MasterZivBasil A. Sidorov чтобы ваши переопределения были предсказуемы Последнее -- не требование языка, а лишь правило хорошего тона и логической целесообрезности.Я правильно подчеркнул себя любимого?
Или что?
...
Рейтинг: 0 / 0
18.01.2013, 12:06
    #38115086
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
Basil A. SidorovMaximuS_GСуществует ли какое-либо соглашение, или просто практика, которая говорит о том, что для оператора "+" нужны два операнда? А если нужно произвести действия над непосредственно объектом (то есть один операнд), то нужно использовать оператор "++"?
Или как я захочу, так я и переопределю "+", с одним или двумя операндами?Вы можете переопределять встроенные операторы, но:
1. Семантика оператора заменяется на семантику функционального вызова. В частности, будут вычислены все аргументы и порядок вычисления не гарантируется;
2. Как минимум один аргумент переопределённого оператора должен быть не встроенного типа. Скажем, operator+(int, int) - недопустим;
3. Если вы переопределили один оператор - переопределяйте и все "связанные". Скажем, ++ (обе формы), += и + - четыре разных оператора и чтобы ваши переопределения были предсказуемы, необходимо реализовать все четыре.
Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него.
Я понял, спасибо большое! Я вот это не совсем понял:
Конкретно для арифметических операторов рекомендуется переопределить "оператор с присваиванием" и реализовать всё остальное через него.
"оператор с присваиванием" иммется ввиду вот это?
Код: plaintext
1.
operator=


Если да, как через него реализовать оператор ++?
Скажем, ++ (обе формы), += и + - четыре разных оператора
А "-=" и "-" тоже нужно переопределять чтобы переопределения были предсказуемы?
Заранее спасибо!
...
Рейтинг: 0 / 0
18.01.2013, 12:22
    #38115119
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
Гламурный чертДа. Переопределение может быть сделано вне класса, с ограничениями о которых писали выше. Т.е. если вы переопределяете оператор в классе, то первым операндом является сам
экземпляр, и требуется только один операнд. Если это "дружественная функция" определенная вне класса - тогда два операнда типа "класс".
Ага, я понял, что Вы имели ввиду. Спасибо! Да, я это знаю. В моем вопросе подразумевалось, что первым аргументов в любом случае передается сам экземпляр в неявном (параметр this, функция является членом класса) или явном (первый параметр функции, функция не является членом класса) виде.
...
Рейтинг: 0 / 0
18.01.2013, 21:14
    #38116010
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
MaximuS_G"оператор с присваиванием" иммется ввиду вот это?
Код: plaintext
1.
operator=

+=, -=, *= и т.д.Если да, как через него реализовать оператор ++?Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
const T operator ++() { // префиксный оператор
  *this  += 1;
  return *this;
}

const T operator ++(int) { // постфиксный оператор
  T old = *this;
  *this += 1;
  return old;
}

На самом деле, я цитирую "Наиболее эффективное использование C++" Скотта Мейерса.
...
Рейтинг: 0 / 0
19.01.2013, 15:19
    #38116369
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переопределенный оператор "+" - сколько операндов
Basil A. Sidorov,
Спасибо большое!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Переопределенный оператор "+" - сколько операндов / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]