Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 9
1

Перегруженный оператор +

23.05.2019, 16:03. Просмотров 1048. Ответов 4

Товарищи программисты не могу понять вот этот кусок кода: dist4 = dist1 + dist2 + dist3;
у нас есть конструктор с двумя параметрами, но метод Distance operator+(Distance) const;
как видите с одним аргументом, значит сначала перегрузку вызывает объект dist2 для dist3
после dist1 для dist2, и уже после этого передается все в dist4, или нет? помогите понять это.

// перегрузка операции + для сложения переменных типа Distances
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
using namespace std;
class Distance      // класс английских мер длины
{
private:
    int feet;
    float inches;
public:
    Distance() : feet(0), inches(0.0)   // конструктор без параметров
    {}
    Distance(int ft, float in) : feet(ft), inches(in)   // конструктор с двумя параметрами
    {}
    void getdist()  // получение информации от пользователя
    {
        cout << "Ввидети футы: "; cin >> feet;
        cout << "Введите дюймы: "; cin >> inches;
    }
    void showdist() const
    { cout << feet << "\'-" << inches << '"'; }
    Distance operator+(Distance) const;
};
Distance Distance::operator+(Distance d) const
{
    int f = feet + d.feet;          // складываем футы
    float i = inches + d.inches;    // складываем дюймы
    if (i >= 12.0)                  // если дюймов стало больше 12
    {
        i -= 12.0;                  // то уменьшаем дюймы на 12
        f++;                        // и увеличиваем футы на 1
    }
 
    return Distance(f, i);          // создаем и возвращаем временную переменную
}
int main()
{
    setlocale(LC_ALL, "RU");
    Distance dist1, dist3, dist4;   // определяем переменные
    dist1.getdist();                // получаем информацию
    Distance dist2(11, 6.5);        // определяем переменную с конкретным значением
    dist3 = dist1 + dist2;          // складываем две переменные
    dist4 = dist1 + dist2 + dist3;  // складываем несколько переменных
    cout << "dist1 = "; dist1.showdist(); cout << endl; // показываем, что же у нас получилось
    cout << "dist2 = "; dist2.showdist(); cout << endl;
    cout << "dist3 = "; dist3.showdist(); cout << endl;
    cout << "dist4 = "; dist4.showdist(); cout << endl;
 
    cin.get();
    cin.get();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2019, 16:03
Ответы с готовыми решениями:

перегруженный оператор <<
подскажите как перегрузить оператор &lt;&lt; для класса как описать само перегружение friend ostream&amp;...

Перегруженный оператор
MathClass = Harry; Раньше я думал, что перегрузка - это предоставление оператору функций,...

Перегруженный оператор +
Здравствуйте. Нужно разобраться как работает перегруз операторов. Я взял оператор + и пытаюсь...

Не вызывается перегруженный оператор
#include&lt;iostream&gt; using namespace std; struct dates { int num; int count; dates *back;...

4
(80 / 20 || 50 / 50) = x
1647 / 1120 / 432
Регистрация: 16.08.2014
Сообщений: 4,684
Записей в блоге: 1
23.05.2019, 16:23 2
UMD, dist1.operator+(dist2) который в коде (dist1 + dist2), возвращает временный объект который используется в вызове
(временный объект).operator+(dist3), который тоже возвращает временный объект который передается в dist4.operator=(временный объект)
1
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 9
23.05.2019, 17:05  [ТС] 3
_stanislav тоесть с самого левого на право... я думал по очередности, крайний справа ЛЕВЫЙ(dist2 + dist3) и т.д.
значит dist4 = dist1 + dist2 + dist3; работает так?: (я пишу так как я понял)

dist4.operator=Distance(f, i) = dist1.operator+(dist2) + Distance(f, i).operator+(dist3);

я правильно понял?

я извеняюсь что туплю, но мне немного тяжело дается С++, учил его аж 2004 году, щас решил заного.
много нового и не понятного, например стандарты и все такое...
0
(80 / 20 || 50 / 50) = x
1647 / 1120 / 432
Регистрация: 16.08.2014
Сообщений: 4,684
Записей в блоге: 1
23.05.2019, 17:12 4
Лучший ответ Сообщение было отмечено UMD как решение

Решение

Цитата Сообщение от UMD Посмотреть сообщение
я правильно понял?
вроде бы да, но так правильней:
dist4.operator=(dist1.operator+(dist2).operator+(dist3) );
1
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 9
23.05.2019, 17:23  [ТС] 5
теперь понял спасибо ))

dist4.operator=(dist1.operator+(dist2).operator+(dist3) ); это равносильно: dist4 = dist1.add_dist(dist2, dist3);
так как есть конструктор с двумя параметрами, Distance(int ft, float in) : feet(ft), inches(in)
правда не хватает метода add_dist(Distance, Distance);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2019, 17:23

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

Перегруженный оператор присваивания
Добрый вечер! Встретил пример в книге, где есть перегруженный оператор присваивания. В итоге код...

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

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

Функтор и перегруженный оператор
захотел понять многопоточность в новом стадарте с++11 - смотрю...


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

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

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