2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|||||||||||
1 | |||||||||||
Вывод данных и перегрузка операторов.07.04.2012, 00:08. Показов 1065. Ответов 12
Метки нет (Все метки)
Добрый вечер, объясните пожалуйста что я не так делаю.
0
|
07.04.2012, 00:08 | |
Ответы с готовыми решениями:
12
Потоковый ввод/вывод в файл(перегрузка операторов >> <<) Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this Вывод данных, перегрузка операций Перегрузка операторов |
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
07.04.2012, 00:18 | 2 |
Какова цель? Я если честно вообще не могу понять половины из написанного кода
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
07.04.2012, 00:21 [ТС] | 3 |
Цель - изучение языка, это я попробовала поперезагружать операторы.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
07.04.2012, 00:24 | 4 | |||||
Ну тогда думаю имелось ввиду вот это
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
07.04.2012, 00:28 [ТС] | 5 |
Спасибо, но Вы не совсем меня поняли. Меня интересует не как заствить работать, а почему не работает вот так
cout<<elem.a<<(++elem).a<<(++elem).a<<elem.a; И что меняется при разделении на несколько cout.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
07.04.2012, 00:35 | 6 |
На сколько знаю, очередность операций в потоке cout не определена, и зависит от компилятора. У меня например выводит 3321. Поэтому, думаю, вычисления лучше производить отдельным оператором, а потом уже выводить данные.
0
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
||||||
07.04.2012, 00:49 [ТС] | 7 | |||||
Ну вот например же при
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
07.04.2012, 01:00 | 8 |
Скорее с реализацией отдельного компилятора
Добавлено через 6 минут Я же с вашим кодом получаю main.cpp:19:33: error: operation on 'a' may be undefined [-Werror=sequence-point] То есть компилятор говорит что операция над a может быть не определена. Так как переменная модифицируется два раза в потоке. Вот думаю будет интересно почитать тык
2
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
07.04.2012, 01:36 | 9 | |||||
Toshkarik, дело не в потоке, поток - просто абстракция, неизвестная компилятору. Дело в точках следования, по сути, такое выражении можно сравнить с
1
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
07.04.2012, 02:40 | 10 |
silent_1991, да, я это понимаю. Я просто говорил про данный конкретный случай. На сколько я понимаю, переменная должна модифицироваться ровно один раз в промежутке от одной точки следования до другой. В данном случае от одной ; до другой ;
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||||||||||
07.04.2012, 03:08 | 11 | |||||||||||||||
Не должна. Просто переход через точку следования гарантирует, что все эффекты от действий, произведённых до этой точки следования, уже вступили в силу. Проблема здесь в том, что стандарт не определяет, как должен вычисляться инкремент (а значит, что когда он реально вычислится, зависит от самых разных вещей, начиная с внутреннего представления программы в компиляторе и заканчивая вспышками на солнце).
В данном конкретном случае могу предположить, что компилятор воспринял выражение
Добавлено через 12 минут Я ошибся. На самом деле код будет воспринят как
2
|
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
07.04.2012, 21:57 [ТС] | 12 |
Спасибо большое! Но все-таки поражаюсь, ведь для ++i код будет воспринят также. Почему тогда уже другой порядок вычисления аргументов Теперь буду остерегаться делать то, что раньше для меня было абсолютно естественным.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
07.04.2012, 23:17 | 13 |
Грымзик, в одном случае вызов пользовательского метода (operator++), в другом - выполнение стандартной операции. Эти две вещи обрабатываются по-разному (пользовательские операции обрабатываются как функции).
1
|
07.04.2012, 23:17 | |
07.04.2012, 23:17 | |
Помогаю со студенческими работами здесь
13
Перегрузка операторов Перегрузка операторов Перегрузка операторов Перегрузка операторов <<, >> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |