Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
GoldenId
131 / 130 / 64
Регистрация: 11.11.2010
Сообщений: 770
Записей в блоге: 14
Завершенные тесты: 1
1

Operator +, operator += — какой через какой реализовывать?

25.04.2017, 10:50. Просмотров 160. Ответов 6
Метки нет (Все метки)

Для
C++
1
2
3
4
5
6
7
class Fraction
{
    // ...
public:
    Fraction operator + ( const Fraction& right ) const;
    Fraction& operator += ( const Fraction& right );
};
как лучше сделать, так:
C++
1
2
3
4
5
6
7
8
9
10
11
Fraction Fraction::operator + ( const Fraction& right ) const
{
    Fraction res( ... );
    // само сложение
    return res;
}
 
Fraction& Fraction::operator += ( const Fraction& right )
{
    return *this = *this + right;
}
или так:
C++
1
2
3
4
5
6
7
8
9
10
11
Fraction Fraction::operator + ( const Fraction& right ) const
{
    Fraction res( *this );
    return res += right;
}
 
Fraction& Fraction::operator += ( const Fraction& right )
{
    // прибавление right к *this
    return *this;
}
?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2017, 10:50
Ответы с готовыми решениями:

Вызов operator[] через operator[] const
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он...

Реализация operator + через operator +=
внутри следующей темы возник вопрос, ответ на который так и не был получен:...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает...

operator char() или operator int()
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги...

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число"
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс,...

6
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
25.04.2017, 11:04 2
ИМХО, лучше += выражать через + и =
0
GoldenId
131 / 130 / 64
Регистрация: 11.11.2010
Сообщений: 770
Записей в блоге: 14
Завершенные тесты: 1
25.04.2017, 11:05  [ТС] 3
MrGluck, объясните, почему?
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
25.04.2017, 11:14 4
GoldenId, лучше += сперва сделай, ибо один пишется с использованием другого
C++
1
2
3
4
5
obj operator+ (const obj& a, const obj& b)
{
  obj tmp = a;
  return tmp += b;
}
0
alexjun
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 202
Завершенные тесты: 1
25.04.2017, 11:17 5
При выражении += через + как будет реализовываться a+=a?

ведь в этом случае this указывает на rigth, а райт защищен от изменения.
return *this = *this + right;

Или я не прав?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
25.04.2017, 12:00 6
Цитата Сообщение от alexjun Посмотреть сообщение
Или я не прав?
Тут разницы нет с присваиванием самому себе. Можно же написать a = a. Если оператор присваивания правильно написан, то проблем не будет.
0
alexjun
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 202
Завершенные тесты: 1
25.04.2017, 12:27 7
MrGluck, я говорю про конкретный случай. В данном написании ведь a+=a не будет работать.
0
25.04.2017, 12:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2017, 12:27

Индексация в operator[] через структуру
class type{ //... } struct point{ int i, j; } class A{ private:...

Обработка переменных через функцию operator(){.}
Вообщем, есть несколько переменных и массивов. Они задаются в в главной части...

Чем "operator *=" отличается от "operator *"?
снова застряла, не могу понять, чем этот оператор должен отличаться от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru