Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
JesD
9 / 7 / 2
Регистрация: 13.09.2017
Сообщений: 42
1

Перегрузка операторов

16.09.2018, 19:09. Просмотров 102. Ответов 2
Метки нет (Все метки)

Всем привет. Читаю Страуструпа, дошел до перегрузки операторов и наткнулся там вот на такое высказывание:

Любую функцию, модифицирующую состояние классного объекта, следует определять как функцию-член, принимающую объект класса в качестве неконстантного аргумента по ссылке (или неконстантного указателя)

Реализуем перегрузку оператора по рекомендации Страуструпа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Number
{
  private:
    int number_;
 
  public:
    
    Number& operator +=(Number& value)
    {
        this->number_ += value.number_;
        return *this;
    } 
};

Вопрос: почему функция-оператор должна принимать в качестве аргумента именно неконстантную ссылку на объект, если сам принимаемый в качестве аргумента объект не должен изменяться ? Какое преимущество такая перегрузка имеет над такой ?:

C++
1
2
3
4
5
 Number& operator +=(const Number& value)
    {
        this->number_ += value.number_;
        return *this;
    }
Добавлено через 7 минут
Цитата Сообщение от JesD Посмотреть сообщение
в качестве аргумента именно неконстантную ссылку на объект
Точнее, принимать объект в качестве неконстантного аргумента по ссылке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2018, 19:09
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка операторов
Помогите, пожалуйста, решить задачу При создании собственных типов данных с помощью классов...

Перегрузка операторов
Объясните, пожалуйста, что означает, эта строка? return a != t1.a && b != t1.b ? 1 : 0; что...

Перегрузка операторов
Расскажите пожалуйста про перегрузку в классе: всегда ли в ней должен быть return и что в нём...

[c++] Перегрузка операторов
Не работает. #include <conio.h> #include <iostream.h> #pragma argsused struct FazzyNumber {...

2
Pashka Durov
43 / 18 / 6
Регистрация: 30.01.2018
Сообщений: 147
16.09.2018, 19:31 2
По сути никакого, но если ты нечаянным для себя образом попытаешься изменить объект, то получишь ошибку (такое случалось со мной, вот ссылка на тему Перегрузка "+" для сложения объектов). Также некоторые компиляторы могут ругаться, что объект не передается как константный.
0
New man
236 / 157 / 63
Регистрация: 23.05.2011
Сообщений: 811
Завершенные тесты: 4
16.09.2018, 19:37 3
JesD, ты неправильно понял, видимо.
Мне кажется, он имел в виду вот это:

Number& operator +=(const Number& value)&

В отличие от Number& operator +=(const Number& value), ты не сможешь написать так:
C++
1
Number()+=x;
Добавлено через 53 секунды
Видишь амперсанд после круглых скобок и перед фигурными? Это означает, что метод можно вызывать только у неконстантного lvalue.

Добавлено через 1 минуту
Вот этот вариант Number& operator +=(Number& value) плох тем, что ты не сможешь написать:
C++
1
2
Number x, y, z;
x+= y+z;
Добавлено через 1 минуту
x,y,z — lvalue; x+y — rvalue.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2018, 19:37

Перегрузка операторов
Реализуйте класс CTime , моделирующий время суток ( количество часов , минут и секунд). Каркас...

Перегрузка операторов С++
Здравствуйте, недавно начал изучать С++, до этого старался решать проблемы самостоятельно, но...

Перегрузка операторов
Доброго времени суток. Начал изучать основы ООП, дошел до перегрузки операторов. В программе...


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

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

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