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

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

25.04.2017, 10:50. Просмотров 412. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2017, 10:50
Ответы с готовыми решениями:

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

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

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

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

6
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
25.04.2017, 11:04 2
ИМХО, лучше += выражать через + и =
0
131 / 130 / 64
Регистрация: 11.11.2010
Сообщений: 815
Записей в блоге: 14
25.04.2017, 11:05  [ТС] 3
MrGluck, объясните, почему?
0
800 / 530 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 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
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
25.04.2017, 11:17 5
При выражении += через + как будет реализовываться a+=a?

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

Или я не прав?
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
25.04.2017, 12:00 6
Цитата Сообщение от alexjun Посмотреть сообщение
Или я не прав?
Тут разницы нет с присваиванием самому себе. Можно же написать a = a. Если оператор присваивания правильно написан, то проблем не будет.
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
25.04.2017, 12:27 7
MrGluck, я говорю про конкретный случай. В данном написании ведь a+=a не будет работать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2017, 12:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот...

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

Почему в данном случае используется operator int, а не operator double?
Вот программа using System; class ThreeD { int x, y, z; // трехмерные координаты ...

Ребят, до этого времени избегал использование "? Operator (ternary operator)"
Прошу помочь решить эту задачу. Если не сложно с объяснением. Буду Вам очень признателен. C #...


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

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

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