Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / переопределенее операций "+" и "+=" / 11 сообщений из 11, страница 1 из 1
18.01.2013, 12:48
    #38115164
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
Всем привет.
Есть 2 варианта переопределения операции "+" в классе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Вариант 1
className operator+(const className &from)
{
	className temp;
	temp.eField1 = this->eField1+from.eField1;
	return temp;
}

// Вариант 2
className& operator+(const className &from)
{
	this->eField1 = this->eField1+from.eField1;
	return *this;
}


Правильно ли я понимаю, что во втором случае переопределяется операция "+=", а не "+"?
...
Рейтинг: 0 / 0
18.01.2013, 19:10
    #38115906
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
// Вариант 1
className operator+(const className &from)
{
        cout << "1";
	className temp;
	temp.eField1 = this->eField1+from.eField1;
	return temp;
}

// Вариант 2
className& operator+(const className &from)
{
        cout << "2";
	this->eField1 = this->eField1+from.eField1;
	return *this;
}


int main()
  className a, b, c;
  a = b+c;
  a +=b;
  return 0;
}

Если это напечатает 12, то ты прав. Если на выходе будет что-то другое, то не прав.
...
Рейтинг: 0 / 0
18.01.2013, 21:47
    #38116028
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
White OwlЕсли это напечатает 12, то ты прав. Если на выходе будет что-то другое, то не прав.
Спасибо, но не понял :). Два одинаковых оператора не получится в классе перегрузить, так как они отличаются только возвращаемым значением.
...
Рейтинг: 0 / 0
19.01.2013, 01:11
    #38116149
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
MaximuS_GWhite OwlЕсли это напечатает 12, то ты прав. Если на выходе будет что-то другое, то не прав.
Спасибо, но не понял :). Два одинаковых оператора не получится в классе перегрузить, так как они отличаются только возвращаемым значением.Значит "не прав".
...
Рейтинг: 0 / 0
19.01.2013, 11:47
    #38116259
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
White OwlЗначит "не прав".
А что я упускаю тогда?
...
Рейтинг: 0 / 0
20.01.2013, 06:31
    #38116742
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
MaximuS_GWhite OwlЗначит "не прав".
А что я упускаю тогда?Смысл.
Давай вернемся в первый день изучения С++.
a = a+b - сложить a и b и поместить результат в а . Все просто и легко.
a += b - взять значение a , прибавить к нему b и положить результат обратно в a . То есть эта запись должна по смыслу быть одинаковой с первой записью. Так?
А теперь вопрос на засыпку: Если ты хочешь написать две разные функции для обработки + и += означает ли это что ты хочешь a=a+b и a+=b работать по разному и в итоге выдавать два разных результата?
...
Рейтинг: 0 / 0
20.01.2013, 22:35
    #38117122
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
А теперь вопрос на засыпку: Если ты хочешь написать две разные функции для обработки + и += означает ли это что ты хочешь a=a+b и a+=b работать по разному и в итоге выдавать два разных результата?
Я думаю да.
Просто создал я эту тему, потому что мне здесь сказали, что если я возвращаю из перегруженного оператора "+" один из объектов, а не новый объект, то я произвожу операцию "+=", а не "+". Именно это я и пытаюсь понять. Именно этим и отличаются два варианта перегрузки оператора "+", приведенные в первом посте.
...
Рейтинг: 0 / 0
20.01.2013, 22:40
    #38117125
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
Может имелось ввиду не что возвращать, а что изменять?
То есть вот эта строчка определяет операцию:
Код: plaintext
1.
temp.eField1 = this->eField1+from.eField1;


изменяю новый объект, объекты учавствующие в операции, не изменяются - операция "по смыслу" представляет собой операцию "+"
Код: plaintext
1.
this->eField1 = this->eField1+from.eField1;


изменяю левый объект, учавствующий в операции - операция "по смыслу" представляет собой операцию "+=" для левого объекта.
Может так?
...
Рейтинг: 0 / 0
21.01.2013, 01:07
    #38117240
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
MaximuS_Gизменяю новый объект, объекты учавствующие в операции, не изменяются - операция "по смыслу" представляет собой операцию "+"
изменяю левый объект, учавствующий в операции - операция "по смыслу" представляет собой операцию "+=" для левого объекта.
Может так?ну на конец то )))
для полного понимания обрати внимание, что
Код: plaintext
1.
this->eField1 = this->eField1+from.eField1;

можно переписать вот так:
Код: plaintext
1.
this->eField1 += from.eField1;

и всё сразу становится на свои места ))
...
Рейтинг: 0 / 0
21.01.2013, 01:47
    #38117264
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
MaximuS_GА теперь вопрос на засыпку: Если ты хочешь написать две разные функции для обработки + и += означает ли это что ты хочешь a=a+b и a+=b работать по разному и в итоге выдавать два разных результата?
Я думаю да.
Просто создал я эту тему, потому что мне здесь сказали, что если я возвращаю из перегруженного оператора "+" один из объектов, а не новый объект, то я произвожу операцию "+=", а не "+". Именно это я и пытаюсь понять. Именно этим и отличаются два варианта перегрузки оператора "+", приведенные в первом посте.


Блин, ну неужели так сложно понять, с++ же не криптография какая-то, если ты определишь operator +, это будет перегружена операция +, если ты определишь operator += , это будет перегружена операция += .
Это что, очень сложно понять?

В той теме тебе говорили, что семантически получался как бы += из +, и как бы намекали, что это неправильно, именно потому, что семантика у + другая должна быть.

Но если тебе именно это надо, ты имееш возможность так сделать. Просто не очень хорошо всех и себя обманывать, выдумывая новые семантики для старых операций.

Оно конечно, семантика операции зависит от типа данных, и может быть любой, но без надобности принято не нарушать стандартную семантику.
...
Рейтинг: 0 / 0
21.01.2013, 11:58
    #38117682
MaximuS_G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
переопределенее операций "+" и "+="
MasterZiv , egorych спасибо большое! Удачи! :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / переопределенее операций "+" и "+=" / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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