Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Бип из системно... 65535
Пример работы с... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
21 ошибка прогр... 65535
Гостевая книга ... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Содержание сайт... 65535
Invision Power ... 65535
Имитационное мо... 65535
Программируемая... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

Пользователей: 13,319
новичок: leyir84776
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы крупного аэропорта на GPSS + Пояснительная записка
Игра Sokoban на Delphi + Блок схемы
Моделирование работы аэропорта на GPSS + Пояснительная записка

Реализация операции сложения с присваиванием
Единственный вопрос, который пока не ясен: что возвращать в качестве результата. Попробуем возвращать значение. Тогда внешнее определение метода будет таким, как показано в листинге 3.4.

Листинг 3.4. Реализация операции сложения с присваиванием
TMoney TMoney::operator+=(const TMoney &b) { Summa += b.Summa; return *this;
}



В качестве результата возвращается текущий объект. Проверим теперь различные варианты использования операции. Простой однократный вариант, естественно, работает правильно:
TMoney t(2), р(3.12), s; t+=p; t .DisplayMoneyO ;



При выполнении этого фрагмента мы получим на экране сумму t и р. Однако встроенная операция допускает запись следующего вида:
t+=b+=c;



При этом переменной b присваивается сумма переменных b и с, а в переменную t попадает сумма прежнего значения t и нового значения Ь. Проверим нашу операцию на многократность присваивания — оказывается не все так просто. Для сравнения покажем работу встроенной операции с целыми числами:
TMoney t(2.ee). rr(0);
rr+=t+=t; // должно быть t = 4.96, rr = 4.66
rr.DisplayMoneyO; // выводит 4.66
t.DisplayMoneyO; // выводит 4.66
t = 2; rr = 6;
(rr+=t)+=t; // должно быть t = 4.60, rr = 4.66
rr.DisplayMoney(); // выводит 2.66
t.DisplayMoneyO; // выводит 2.66
int a = 6, d = 2;
(a+=d)+=d; // должно быть d = 2,a = 4
cout << a << endl; // выводит 4
cout << d << endl; // выводит 2



Как видим, наша операция выполняется не так, как встроенная: значение самой правой переменной в левую переменную не попадает, если слева стоят скобки. При этом выражение без скобок работает совершенно правильно:
rr+=t+=t; // rr должно стать 4.66



Это и понятно: операция += выполняется справа налево, поэтому сначала вычисляется выражение t+=?t, а потом полученное значение попадает в гг.
Чтобы разобраться в проблеме, вернемся к проблемному выражению:
(rr+=t)+=t;



Давайте перепишем его в функциональной форме:
(rr.operator+=(t)).operator+=(t);



Сначала выполняется операция в скобкахзначение переменной t прибавляется к гг. Результатом операции в скобках является значение, помещаемое в переменную гг. Поэтому создается анонимный временный объект, с которым выполняется правая операция. Чтобы результат попадал в самую левую переменную, результатом операции должна быть ссылка. Таким образом, выражение (а+=Ь) может стоять в левой части другой операции +=. Такие выражения в С++ называются левосторонними значениями, или 1-значениями (1-value). Хотя в стандарте (см. п.- 3.10 в [1]) этому понятию уделено более страницы, нам достаточно понять, что любое выражение, которое может стоять слева от знака любой операции присваивания, называется 1-значением. Соответственно, выражение, которому нельзя присвоить и которое может стоять только справа от знака операции присваивания, называется г-значением (r-vaiue).
Программистам часто нужны качественные принтеры для того что бы распечатывать документацию. Для этого идеально подойдет МФУ Canon PIXMA MP210 с СНПЧ.
Опубликовал Kest Сентябрь 04 2013 19:00:08 · 0 Комментариев · 3532 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Mass Photo Upload
Flud Vkontakte.ru
Delphi 6 программ...
AUTOWEB
Autorunner
Java в примерах -...
Delphi World 6.0
MPTools
ИНТЕРНЕТ ПРОГРАММ...
Ics
Искусство програм...
Программирование ...
Пример клиента ФТ...
BIOS
Философия C++. Пр...
Файловый менеджер
Анекдоты с ostrie.ru
Цветной Grid
Разработка распре...
Adapter (пример D...

Топ загрузок
Приложение Клие... 100767
Delphi 7 Enterp... 97593
Converter AMR<-... 20240
GPSS World Stud... 16995
Borland C++Buil... 14165
Borland Delphi ... 10202
Turbo Pascal fo... 7360
Калькулятор [Ис... 5944
Visual Studio 2... 5196
Microsoft SQL S... 3654
Случайные статьи
указатель примечание
Этапы решения комп...
Вычисление НОД по ...
Способы и схемы по...
В среде с постоянн...
Использование моде...
Содержание
Перетаскивание окн...
Процедура GetFillS...
Справочные материалы
13.2. Линейные стр...
Казино Вулкан Ставка
Результаты
Управление вызовом...
Частные клиники Ка...
Как перемещать кур...
Манипуляторы с арг...
Псевдоуказатели (Б...
В чём удобство онл...
Способы вывода сре...
Игры. Игромания
Где можно приобрес...
анонимной учетной ...
Что демонстрирует ...
Инициализация объе...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?