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

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

25.04.2017, 10:50. Просмотров 153. Ответов 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 += — какой через какой реализовывать? (C++):

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

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

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

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

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

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

6
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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
20 / 20 / 8
Регистрация: 13.02.2017
Сообщений: 114
Завершенные тесты: 1
25.04.2017, 11:17 #5
При выражении += через + как будет реализовываться a+=a?

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

Или я не прав?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
25.04.2017, 12:00 #6
Цитата Сообщение от alexjun Посмотреть сообщение
Или я не прав?
Тут разницы нет с присваиванием самому себе. Можно же написать a = a. Если оператор присваивания правильно написан, то проблем не будет.
0
alexjun
20 / 20 / 8
Регистрация: 13.02.2017
Сообщений: 114
Завершенные тесты: 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(){.}
Вообщем, есть несколько переменных и массивов. Они задаются в в главной части...

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

Expected init-declarator before "operator".expected `,' or `;' before "operator"
Пример не мой. Пытаюсь у себя запустить и чтото неполучается. Ошибка на строке...

operator<
bool operator&lt;(char c1,char c2) { //error C2803: 'operator &lt;' must have...


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

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

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