Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 16:32   #31
XuMuK
Пользователь
 
Регистрация: 08.10.2007
Сообщений: 11
По умолчанию

Сыроежка, спасибо. Работает Пришлось правда, кода перекроить, дабы подогнать под мод. const.
XuMuK вне форума Ответить с цитированием
Старый 14.07.2011, 18:43   #32
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от XuMuK Посмотреть сообщение
Сыроежка, спасибо. Работает Пришлось правда, кода перекроить, дабы подогнать под мод. const.
Так это же очень хорошо! Вы усвоили урок с использованием const квалификатора и как правильно перегружать операторы.

К тому же не забывайте, что объекты вашего класса могут определяться как констатные. И что тогда вы будете делать со своими перегруженными операторами для этих объектов?!
Чтобы было понятно, то помимо объявления

class A;

A a1;

пользователь может ведь и объявить константный объект

const A a2.

Многие про это забывают, а потому константные объекты их класса вообще порой нельзя объявить, так как ни одна функция - член класса не будет применима к этому объекту!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 16.07.2011, 10:21   #33
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Сыроежка Посмотреть сообщение
Я имел в виду, если возвращать из перегруженного оператора суммирования константный объект, то при желании можно писать
(A + B).f()
Стандарт не запрещает возвращать не константные объекты. Так, что не надо свои фантазии про стандарт выдавать за действительность !

Цитата:
Сообщение от Сыроежка Посмотреть сообщение
Вы усвоили урок с использованием const квалификатора и как правильно перегружать операторы.
А вы вот не освоили и даже совсем не знаете стандарта !
An1ka вне форума Ответить с цитированием
Старый 16.07.2011, 11:16   #34
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
А вы вот не освоили и даже совсем не знаете стандарта !
Слышится начало симфонии Бетховена: Ta-da-da-dam!!!
EUGY вне форума Ответить с цитированием
Старый 16.07.2011, 21:28   #35
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Стандарт не запрещает возвращать не константные объекты. Так, что не надо свои фантазии про стандарт выдавать за действительность !


А вы вот не освоили и даже совсем не знаете стандарта !
У вас очень богатая фантазия. Приведите , плиз, мою цитату, где я говорил, что стандарт запрещает возвращать неконстатные объекты?!!
Если вы не в состоянии привести такую мою цитату, то вы просто - непорядочный человек и занимаетесь подтасовками.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 16.07.2011, 21:37   #36
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Сыроежка Посмотреть сообщение
У вас очень богатая фантазия. Приведите , плиз, мою цитату, где я говорил, что стандарт запрещает возвращать неконстатные объекты?!!
Отстаивание позиции, что operator+() должен возвращать константный объект, разве не поклонение ложным стандартам ??
Вот вам цитата про якобы "нарушения":
Цитата:
Сообщение от Сыроежка Посмотреть сообщение
Возврашение не константного объекта нарушает общепринятое представление для операций со встроенными типами. То есть общая семантика операторов нарушается. Вы же не можете выполнять такой, например, код
Код:
int x = 3, y = 4;
x + y = 5;
Такое повдение ожидают пользователи вашего кода и от вами определнных типов, то есть семантика операций должна быть идентична для встроенных типов и ваших типов. Этот принцип называется принципом наибольшей предсказуемости поведения.
Очень интересно... У вас случайно не две двери в квартире ? Ведь пользователи вашей квартиры будут входить и выходить. И если дверь одна, то однажды может случится такое, что люди столкнуться лбами на входе... Нужно срочно ставить 2 двери, одна для входа, а другая для выхода !
Цитата:
Сообщение от Сыроежка Посмотреть сообщение
Если вы не в состоянии привести такую мою цитату, то вы просто - непорядочный человек и занимаетесь подтасовками.
Это только ваше мнение... А кем вы считаете остальных людей, этим людям совершенно безразлично, тем более от незнакомого человека с форума

Последний раз редактировалось An1ka; 16.07.2011 в 22:26.
An1ka вне форума Ответить с цитированием
Старый 17.07.2011, 00:17   #37
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Отстаивание позиции, что operator+() должен возвращать константный объект, разве не поклонение ложным стандартам ??
Вот вам цитата про якобы "нарушения":
Там не написано, что оператор должен возвращать константный объект. Там написано, что если оператор возвращает константный объект, то поведение будет идентично как для базовых типов, так и для типов, определенных пользователем.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 17.07.2011, 01:13   #38
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Там не написано, что оператор должен возвращать константный объект. Там написано, что если оператор возвращает константный объект, то поведение будет идентично как для базовых типов, так и для типов, определенных пользователем.
Пользователи, которые создают стандарты C++ и создали класс std::string и операторы для него, тоже почему-то не хотят возвращать константные объекты
http://www.cplusplus.com/reference/string/operator+/
An1ka вне форума Ответить с цитированием
Старый 17.07.2011, 01:25   #39
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Пользователи, которые создают стандарты C++ и создали класс std::string и операторы для него, тоже почему-то не хотят возвращать константные объекты
http://www.cplusplus.com/reference/string/operator+/
Но семантически правильнее возвращать константу. Можно возвращать не константу, но лучше константу, о чём тут спорить?
netrino вне форума Ответить с цитированием
Старый 17.07.2011, 08:14   #40
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Но семантически правильнее возвращать константу. Можно возвращать не константу, но лучше константу, о чём тут спорить?
Лучше возвращать не константу, потому что потом можно модифицировать временный объект. Можно конечно иметь локальную переменную для этого и присваивать временный объект ей, а потом модифицировать. Но гораздо удобнее сразу модифицировать объект, чем заводить кучу временных переменных.
An1ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Перегрузка оператора += и >> Jane-sad Помощь студентам 4 01.03.2013 15:38
Перегрузка бинарного оператора + EC.cpp Общие вопросы C/C++ 4 10.04.2011 00:32
Перегрузка оператора + Jane-sad Помощь студентам 0 05.10.2010 13:52
перегрузка оператора -> alex_alpha Общие вопросы C/C++ 5 23.06.2010 19:07
Перегрузка оператора Crucian Общие вопросы C/C++ 2 22.10.2007 09:44