Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
6 / 6 / 2
Регистрация: 27.10.2012
Сообщений: 264
1

Перегрузка операций, поясните

09.04.2016, 16:40. Показов 1364. Ответов 5
Метки нет (Все метки)

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

Часть кода из книги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Distance Distance::operator+(Distance d2) const
{
int f = feet + d2.feet; // складываем футы
float i = inches + d2.inches; // складываем дюймы
if(i >= 12.0) // если дюймов стало больше 12
{
i -= 12.0; // то уменьшаем дюймы на 12
f++; // и увеличиваем футы на 1
}
return Distance(f, i); // создаем и возвращаем временную переменную
}
///////////////////////////////////////////////////////////
int main()
{
Distance dist1, dist3, dist4; // определяем переменные
dist1.getdist(); // получаем информацию
Distance dist2(11, 6.25); // определяем переменную с конкретным значением
dist3 = dist1 + dist2; // складываем две переменные
dist4 = dist1 + dist2 + dist3; // складываем несколько переменных
Из написанного получается, что для строчки 19 нужно написать еще одну функцию уже с двумя аргументами.
Но этого не было сделано, код и так работает. Почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2016, 16:40
Ответы с готовыми решениями:

Перегрузка операций << и >>
Помогите пожалуйста перегрузить &gt;&gt; и &lt;&lt; #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

Перегрузка операций
Добрый день! Задание простенькое но не могу решить так как не получается перегрузка операций....

Перегрузка операций
C++ ругается когда я пытаюсь сделать след-ю перегрузку операций. У меня трехмерный массив matrix и...

Перегрузка операций!
Здравствуйте, у меня есть код (работы со строками) и нужно перегрузить операцию чтобы данный класс...

5
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
09.04.2016, 16:54 2
Лучший ответ Сообщение было отмечено Alek70694 как решение

Решение

Там промежуточный результат используется. Сначала суммируются 2 элемента, потом результат суммируется с третьим.
1
6 / 6 / 2
Регистрация: 27.10.2012
Сообщений: 264
09.04.2016, 16:59  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
Там промежуточный результат используется. Сначала суммируются 2 элемента, потом результат суммируется с третьим.
То есть если я там напишу еще 5 операндов, то будет складываться также - вначале 2 элемента, затем их сумма с третьим складывается, затем полученное значение с четвертым складывается и т.д.?
0
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
09.04.2016, 16:59 4
Лучший ответ Сообщение было отмечено Alek70694 как решение

Решение

C++
1
2
    dist4 = dist1 + dist2 + dist3; 
    dist4 = dist1.operator+(dist2).operator+(dist3);
от результата первого оператора вызывается второй
1
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
09.04.2016, 17:17 5
Цитата Сообщение от Alek70694 Посмотреть сообщение
То есть если я там напишу еще 5 операндов, то будет складываться также - вначале 2 элемента, затем их сумма с третьим складывается, затем полученное значение с четвертым складывается и т.д.?
Да. Операция бинарная, поэтому порядок вычисления будет адаптирован под это.
1
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
09.04.2016, 18:55 6
Лучший ответ Сообщение было отмечено Alek70694 как решение

Решение

Цитата Сообщение от Alek70694 Посмотреть сообщение
То есть если я там напишу еще 5 операндов, то будет складываться также - вначале 2 элемента, затем их сумма с третьим складывается, затем полученное значение с четвертым складывается и т.д.?
Выражение интерпретируется так, как диктуется грамматикой языка (то, что в повседневной жизни обычно называют "ассоциативностью операторов"). Поэтому

C++
1
dist4 = dist1 + dist2 + dist3;
интерпретируется как

C++
1
(dist4 = ((dist1 + dist2) + dist3));
а, например,

C++
1
dist4 += dist1 += dist2 += dist3;
как

C++
1
(dist4 += (dist1 += (dist2 += dist3)));
Операторы, как видите, во всех случаях бинарные и требуют ровно два параметра.
2
09.04.2016, 18:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2016, 18:55
Помогаю со студенческими работами здесь

Перегрузка операций
Не могу понять в чем ошибка. Нужно вводитьномер в формате (123) 456-789 Но почему то только...

Перегрузка операций
Всем привет. Пытаюсь понять ооп. Задали такую лабу: 1. Определить класс согласно варианту...

Перегрузка операций
Задание у меня перегрузить операции: + добавить элемент в множество; * пересечение множеств;...

Перегрузка операций
Здравствуйте. Объясните механизма операции инкремента. Как работают эти строки: Counter(int c) :...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru