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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 20:31   #21
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
2Сыроежка
ВИ не стоит постоянно говорить о безграмотности друг друга, тем более вы не знакомы лично и не можете судить об этом наверняка.
Большей глупости я не читал! Чтобы судить о грамотности человека, совершенно нет необходимости знать его лично! Судят о грамотности по ответам человека!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 07.07.2011, 20:53   #22
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Сыроежка Посмотреть сообщение
Что я должен извлечь из прочситанного?! То, что вы не знаете языка С++? Это я вижу! Я вам еще раз повторяю, что если вы не собираетесь изменять объект, то передавайте его в функцию по константной ссылке, а не по значению. Иначе у вас будут большие накладные расходы по выделению памяти в стеке под объект и вызовы конструкторов и деструкторов. Что вам не понятно?!!! По значению можно передавать лишь встроенные типы, а не типы пользователей, которые к тому же имеют свойство во время своей жизни меняться в сторону уыеличения.
Ну, например, если бы вы внимательно прочитали моё сообщения, а не слюной брызгали, то заметили бы, что я нисколько и не спорю с тем, что чаще всего лучше передавать объекты по ссылке, во избежание накладных расходов. Я говорил о другом, о том, что оптимизации действительно существуют, и что они в самом деле, в некоторых случаях, могут избавить от некоторых накладных расходов связанных с объектами, в частности при возвращении объектов из функции.
Цитата:
Большей глупости я не читал! Чтобы судить о грамотности человека, совершенно нет необходимости знать его лично! Судят о грамотности по ответам человека!
Не могу с этим согласиться. Можно не знать лично, но нужно иметь достаточный опыт общения с человеком, чтобы говорить о его грамотности. А два-три сообщения на форуме это не достаточно.
В любом случае, нет необходимости спорить далее - ТС получил свой ответ, по-моему.
netrino вне форума Ответить с цитированием
Старый 07.07.2011, 21:00   #23
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Я уже неоднократно писал, что вы слышали звон про оптимизацию, а не знаете, где он! Читайте стандарт, а не делайте обывательских рассуждений!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 07.07.2011, 22:58   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Сыроежка, студийный компилятор обладает довольно хорошим оптимизатором.
но многие оптимизацие не стандартны, потому и не надо на них надеятся, о чем вам netrino и говорит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.07.2011, 18:13   #25
XuMuK
Пользователь
 
Регистрация: 08.10.2007
Сообщений: 11
По умолчанию

Спасибо за информацию. Много чего понял
Сейчас столкнулся с ситуацией.
Код:
class Number
{
            ...
            Number&  operator =(Number &B);
            Number    operator +(Number &B);
}

void main()
{
         Number *a = new Number;
         Number *b = new Number ;
         Number *c = new Number;
        *a=*b+*c;
}
Не компилится. Ошибка :
./main.cpp|22|error: no match for ‘operator=’ in ‘* a = Number:: operator+(Number&)(((Number&)c))’|
на строке *a=*b+*c;
Подскажите, плиз, что это может быть ?
При этом код:
Код:
void main()
{
         Number *a = new Number;
         Number *b = new Number ;
         Number *c = new Number;
        *a=*b;
        *b+*c;
}
Компилируется
XuMuK вне форума Ответить с цитированием
Старый 13.07.2011, 18:36   #26
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Объявите оператор присваивания, как

Number & operator =( const Number & );

Я уже ранее вам указывал, как для подобных случаев объявлять эти операторы. В чем проблема?

const Number operator +( const Number & ) const;
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 13.07.2011 в 18:38.
Сыроежка вне форума Ответить с цитированием
Старый 13.07.2011, 18:57   #27
XuMuK
Пользователь
 
Регистрация: 08.10.2007
Сообщений: 11
По умолчанию

Ну во первых, копался в лит-ре - нигде не встречал, чтоб четко необходимо было указывать модификатор const.
Чего оно ругается, не пойму.
А во вторых, в operator = используется выражение (*this)[i] = B[i]; Т.е. перегруженый оператор индекса.
И если в оператор присваивания передавать ссылку на константный объект, то компилятор начнет возмущаться, мол operator[] не константный, что в принципе так и есть, и по другому быть не может.
В итоге вижу два решения:
1. Извратиться и уйти от понятного обращения b[i] внутри operator= к дублированию кода из operator[]
2. Извратиться и расщепить b[i] на две функции, одну нормальную , другую - константную r-value only.

Ни один не радует
XuMuK вне форума Ответить с цитированием
Старый 13.07.2011, 19:12   #28
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от XuMuK Посмотреть сообщение
Ну во первых, копался в лит-ре - нигде не встречал, чтоб четко необходимо было указывать модификатор const.
Чего оно ругается, не пойму.
А во вторых, в operator = используется выражение (*this)[i] = B[i]; Т.е. перегруженый оператор индекса.
И если в оператор присваивания передавать ссылку на константный объект, то компилятор начнет возмущаться, мол operator[] не константный, что в принципе так и есть, и по другому быть не может.
В итоге вижу два решения:
1. Извратиться и уйти от понятного обращения b[i] внутри operator= к дублированию кода из operator[]
2. Извратиться и расщепить b[i] на две функции, одну нормальную , другую - константную r-value only.

Ни один не радует
Я вам объяснил, почему он ругается! Он ругается потому, что вы передаете неконстантную ссылку на временный объект. И не надо божий дар пцтать с яичницей! В вашем операторе присваивания, где вы используется оператор индекса меняется лишь сам объект, а не передаваемый ему параметр. Так что не надо ничего сочинять! ваш код, на который вы ссылаетесь, а именно, (*this)[i] = B[i];, будет работать при моем объявлении оператора присваивания.
Так что не фантазируйте, а делайте то, что я вам сказал!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 13.07.2011, 19:17   #29
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Просто возможно к тому же, что вы забыли объявить константный оператор индекса! Так объявите его! У вас должно быть два оператора индекса: константный и не константный. Константный отличается от неконстатного тем, что возвращается константная ссылка, и сама функция имеет квалификатор const. ТОлько и всего!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 13.07.2011, 19:33   #30
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Сыроежка
Вы уже добрую половину форумчан обвинили в том, они не знают С++. Только вот вы пока не смогли нам доказать, что вы его знаете.
Цитата:
Так что не фантазируйте, а делайте то, что я вам сказал!
Да ещё и пытаетесь приказывать. Нехорошо.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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